SQL Serverとハイパースレッディングに関する現在の知識は?


7

多くの記事(Slava Oksの元のSQL 2000記事Kevin KlineのSQL 2005アップデートを参照)は、SQLサーバーでハイパースレッディングを無効にするか、少なくともサーバーで有効にする前に特定のワークロードをテストすることを推奨しています。

真のマルチコアプロセッサがハイパースレッドプロセッサに取って代わるため、この問題は次第に関連性がなくなりますが、この問題に関する現在の知識は何ですか?このアドバイスは、SQL 2005 64ビット、SQL 2008、またはWindows Server 2008で何か変わりますか?

理想的には、これはステージング環境で事前にテストする必要がありますが、すでにHTを有効にして運用環境にしたサーバーについてはどうでしょうか。発生しているパフォーマンスの問題がHTに関連している可能性があるかどうかを確認するにはどうすればよいですか?SQLパフォーマンスの向上に取り組むときに通常私が追求する他のすべてのものとは対照的に、その方向を示す可能性があるperfmonカウンターの特定の組み合わせはありますか?

編集:これは、一部の高CPUサーバーで全面的な改善の可能性があるため、特に魅力的ですが、クライアントは、ハイパースレッディングを無効にすることで本当にメリットがあるサーバーを特定するのに役立つ具体的なものを見たいと思っています。もちろん、従来のパフォーマンスのトラブルシューティングは継続していますが、少しでも役立つ場合があります。


「マルチコアプロセッサはハイパースレッドのプロセッサを置き換える」。え?マルチコアCPUはハイパースレッドのCPUを置き換えるものではなく、複数のハイパースレッドコアを備えています。
ウォーレン

回答:


16

SQLOSでは、SQL Serverが認識する論理プロセッサごとにスケジューラが作成されます。ハイパースレッディングを有効にすると、これはスケジューラを2倍にすることと同じです。SQLOSの目的の1つは、コンテキストスイッチングの発生を最小限に抑え、防止することです。そのため、論理プロセッサごとに1つのスケジューラのみが作成されます。SQLOSがスケジューラを作成すると、ワーカーの総数がスケジューラ間で分割されます。SQLOSは、協調スケジューリングの形式を実装しています。これは、ワーカーが使用できないリソースを必要とするか、実行クォンタムに達して他のワーカーがスケジューラーで実行できるようにして、スケジューラーを生成するというものです。これにより、スケジューラーが作業を行い、1つずつバインドされるため、コンテキストの切り替えが最小限に抑えられます。

その背景を理解すると、ハイパースレッディングは、SQLOSが特に機能するように設計されている方法とは逆に機能します。具体的には、並列処理はハイパースレッディングで問題が発生する可能性があり、SQLOSが実際にDOP 4システムであるDOP 8でクエリを実行しようとする可能性があるため、CXPACKETの待機が長くなる可能性があります。CPU使用率が低い場合は気付かない場合がありますが、CPU使用率が高いほど、問題が発生しやすくなります。私は最近これについてツイッターで議論しました、そしてそれが助けになるか傷つくかどうかについての合意は「それは依存する」でした。

サーバーで多くの信号待機があり、CPU使用率が低い場合、ハイパースレッディングを有効にすると、内部スケジューラが2倍になり、ワーカーがさらに分散されるため、実行可能なキューでの実行を待機しなくなります。限り。ただし、ワークロードが並列処理を頻繁に利用している場合、sys.dm_os_wait_statsでCXPACKET待機が大量に発生する場合は、ハイパースレッディングを無効にして待機が減少するかどうかを確認します。


詳細をありがとう。DBCC SQLPERF( 'WAITSTATS')がSQL 2000に関する同等の情報を提供するはずだと思いますか?
BradC 2009年

はい。それは正しいです。
ジョナサンケハイヤー09年

2

実際、ハイパースレッディングはなくなっていません。インテルの新しいNehalemクアッドコアチップにはハイパースレッディングが搭載されています。それが推奨されるかどうかについては、いつものように「それは依存します」、それぞれの状況は異なる可能性があります。

HTがパフォーマンスの問題の根本的な原因である可能性は低いですが、詳細がなければ、何が何であるかを言うのは困難です。30〜60秒に1回など、かなり長いサンプルレートでいくつかのperfmonセッションを実行し、CPU、データおよびログディスクのディスクキューの長さを取得します。ページの平均寿命は、十分なメモリがあるかどうかの適切な尺度です。CPUが一貫して80%を超えている場合、またはディスクキューが3桁に達している場合は、問題が見つかりました。


1

HP DL360 G3上のSQL Server 2000:

私はレポートを6回実行し、最初の逃走を捨て、最後の5つを記録しました。次に、データベースを再起動し、ハイパースレッディングをオンに戻しました。レポートをさらに6回実行し、最後の5回の実行からのデータを保持しました。

観察:

  • ハイパースレッディングをオフにしても、見かけ上のCPU使用量は2倍ではなく、約1.5倍です。
  • ハイパースレッディングをオフにすると、ランダムに実行されるレポートの実行が平均で5.2%速くなります。

レポートの繰り返し実行:

ハイパースレッディングあり:20.95%、21.1%、21.9%、20.8%、20.5%
実行時間(ミリ秒):20282、21141、20188、22297、25282。平均21838

ハイパースレッディングなし:29.4%、28.2%、29.1%、28.2%、27.1%
実行時間(ミリ秒):20125、20156、19937、21656、21656。平均20706
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.