私はHammerDB TPC-H(1 GB)ベンチマークを実行しているSQL Server Standardの小さなインスタンスを持っています。すべてのディスク上の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
への書き込みのこの動作は正常ですか?そうでない場合、どこでトラブルシューティングを開始できますか?
コメントへの応答:
Tempdbはサーバーのメモリが不足している場合にのみ使用されることを理解しています
それはexactly trueではありません。 tempdbの使用を引き起こす原因はたくさんあります。
#tempTableName
または##tempTableName
)に明示的にデータを書き込むことです。これはあなたの問題ではないと思いますあなたの問題は流出である可能性があります。いくつかの優れた一般情報と特定のトラブルシューティング手順へのリンクについては、Paul Whiteからの質問へのこの回答をチェックしてください tempdbにハッシュ/ソートが流出する頻度はどのくらいですか?
sp_BlitzCache @SortOrder = 'spills'
( First Responder Kit から)を実行して、プランキャッシュにまだ残っている場合に最も問題のあるクエリを見つけることもできます。
流出に対処する限り、不良クエリに関する個別の質問を投稿し、流出の原因となっているもの(不良カーディナリティの見積もり、少量のメモリ許可など)を解決するのに役立つ可能性があります。
メモリ不足はメモリ許可の低下につながる可能性があり、tempdbの流出につながる可能性があります。そのため、メモリ不足に関する最初のアサーションは正確には当てはまらないと述べました-たまに当てはまるためです!
指定した実行プランは推定実行プランであるため、tempdbにオペレーターが流出したかどうかはわかりません。ただし、メモリを消費する複数の演算子(特に並べ替え)があるため、tempdbアクティビティを生成する可能性があります。