web-dev-qa-db-ja.com

tempdbの使用量が多く、使用量が少ないSQL Server 2016 RAM使用量

私はHammerDB TPC-H(1 GB)ベンチマークを実行しているSQL Server Standardの小さなインスタンスを持っています。すべてのディスク上のtempdbに書き込みを行っていますが、物理ストレージが非常に遅いためにtempdbのみが問題を引き起こしているようです。

tempDB

データベース自体は約3.5 GBで、サーバーには16 GBのRAMがあります。

私の理解では、tempdbはサーバーがメモリ不足の場合にのみ使用されますが、使用率が30%になることはありません。 Physical_memory_in_use_kbは3 GBを超えることはありませんが、時間の経過とともに着実に増加します。 VMwareホストにも明らかな問題はありません。

sp_blitz結果は、CPU使用率が高い(約75〜85%)ことを警告するだけで、それ以外のことはほとんど警告しません。

これは、クラスタ内のSQL Server Standardのほぼデフォルトのインストールです。これらの長時間実行されるベンチマーククエリの場合、tempdbへの書き込みのこの動作は正常ですか?そうでない場合、どこでトラブルシューティングを開始できますか?

コメントへの応答:

3
user19702

Tempdbはサーバーのメモリが不足している場合にのみ使用されることを理解しています

それはexactly trueではありません。 tempdbの使用を引き起こす原因はたくさんあります。

  • 最も明白なのは、ローカルまたはグローバルの一時テーブル(#tempTableNameまたは##tempTableName)に明示的にデータを書き込むことです。これはあなたの問題ではないと思います
  • バージョンストアアクティビティ(たとえば、スナップショット分離またはRCSIを使用したクエリが原因)
  • tempdbに「流出」する可能性のある実行計画演算子がいくつかあります

あなたの問題は流出である可能性があります。いくつかの優れた一般情報と特定のトラブルシューティング手順へのリンクについては、Paul Whiteからの質問へのこの回答をチェックしてください tempdbにハッシュ/ソートが流出する頻度はどのくらいですか?

sp_BlitzCache @SortOrder = 'spills'First Responder Kit から)を実行して、プランキャッシュにまだ残っている場合に最も問題のあるクエリを見つけることもできます。

流出に対処する限り、不良クエリに関する個別の質問を投稿し、流出の原因となっているもの(不良カーディナリティの見積もり、少量のメモリ許可など)を解決するのに役立つ可能性があります。

メモリ不足はメモリ許可の低下につながる可能性があり、tempdbの流出につながる可能性があります。そのため、メモリ不足に関する最初のアサーションは正確には当てはまらないと述べました-たまに当てはまるためです!


指定した実行プランは推定実行プランであるため、tempdbにオペレーターが流出したかどうかはわかりません。ただし、メモリを消費する複数の演算子(特に並べ替え)があるため、tempdbアクティビティを生成する可能性があります。

2
Josh Darnell