2

SQL Server 2014インメモリ OLTP (インメモリ最適化)という優れた機能と思われる機能を紹介しました。数年前に試して、より優れたパフォーマンスを得たMySQL's MEMORY Storage Engineを思い出します。

すでに質問されていることは知っていますが、より的を絞ったシナリオに興味があります。

いくつかのSSRSレポートでは、パフォーマンス上の理由 (多くの結合、グループ化などを含むクエリの非常に見苦しく遅い実行プラン) のために、一時テーブルを使用して部分的な結果を保持することでロジックを分割する大規模なストアド プロシージャを使用しています。

一時テーブルはディスクに書き込まれるため、大量のデータ (数万行または数十万行) を処理する場合にパフォーマンスに影響を与えることが予想されます。

このシナリオで使用In-Memory OLTP tablesする意味はありますか? 以下のメリット・デメリットを考えています。

長所:

  • すべてのデータがメモリに保存されるため、大幅に高速になるはずです

短所:

  • 明示的なセッションの分離が必要です (テーブルには、さまざまな からのデータが混在しないように、ある種のセッション識別子を含める必要がありますSPID)
  • メモリ不足を回避するために明示的なデータのクリーンアップが必要です (宣言スコープを終了した後に一時テーブルが自動的に削除されるのとは対照的に)
  • テーブルに格納されるデータ量に注意する必要があります
4

1 に答える 1

2

あなたはその権利を得ました。

ただし、一時テーブルは他のテーブルと同様に遅延して (通常よりもさらに遅延して) 書き込まれることに注意してください。ディスクへの書き込みは、非同期で行われるため、通常、クリティカル パス上にはありません。非常に大きな一時テーブルを除いて、ダーティ バッファをメモリに保持する SQL Server の機能を使い果たします。

また、一時テーブルの割り当てがすぐに解除されると、ページへの書き込みはまったく発生しません。

したがって、そこにリストした「プロ」は、(完全に) 効果を発揮しないことがよくあります。

つまり、メモリ内テーブルは相互運用モードでも CPU 使用量が少なくなる傾向があります。したがって、「プロ」は常に少なくとも少しは真実です。

スキーマのみの Hekaton テーブルの使用を検討できます。これにより、データの書き込みが確実に発生することはありません。

于 2016-03-16T14:44:25.630 に答える