web-dev-qa-db-ja.com

シグナル待機率の明確化

いずれかのサーバーでCPU使用率が非常に低いのに、信号待機率が高くなっています。
オンラインでシグナル待機に関する数多くの記事を読み、それが実行可能キューで費やされた時間であることを理解しましたが、シグナル中にCPU使用率が非常に低いまま(25%)である理由を理解するのはまだ困難です待機率が高い(75〜90%の帯域)。
セッションが使用可能なCPUの実行を待機している場合、CPUの使用率が非常に低いのはなぜですか?

2

パーセンテージで調整しないでください。サーバーは常に何かの待機が100%になりますが、負荷はそれほど大きくない可能性があります。サーバーは典型的な例です。

1時間に1つのクエリのみを実行するとします。クエリのすべてのデータは既にメモリにキャッシュされており、ロックを競合する人は他にいません。そのクエリにはいくつかの並列タスクがあり、それらはすべてCPU時間を取得する必要があります。

そのクエリはしばらくの間機能し、終了します。シグナル待機を見ると、90〜100%の時間のように見えるかもしれません。待機中は、CPUに接続するのを待っていました。しかし、それだけではそれほど待っていませんでした。

代わりに、ここで説明するように、コアごと、秒ごと(または時間ごと)の待機時間を確認します。

https://www.brentozar.com/archive/2015/03/how-to-measure-sql-server-workloads-wait-time-core-second/

(免責事項:私はそれを書きました。)このようにして、サーバーが実際になんらかの作業を行っているかどうかを確認できます。私はあなたのサーバーに賭けるでしょう、あなたは1時間に数分しか待っていません-つまり、そのサーバー全体のチューニングに煩わ​​される必要はありません。すべてのクエリが高速であることを意味するわけではありません。サーバーレベルのチューニングを実行できないことを意味し、クエリレベルのチューニングに切り替える必要があります。 (サーバーが遅い理由を尋ねるのではなく、クエリが遅い理由を尋ねる必要があります。)

8
Brent Ozar