web-dev-qa-db-ja.com

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

そこにある多くの記事( SlavaOksの元のSQL2000の記事 および KevinKlineのSQL2005アップデート を参照)は、SQLサーバーでハイパースレッディングを無効にすることを推奨しています。少なくともサーバーで有効にする前に、特定のワークロードをテストします

真のマルチコアプロセッサがハイパースレッドプロセッサに取って代わるにつれて、この問題の関連性は徐々に低下していますが、この問題に関する現在の知恵は何ですか?このアドバイスは、SQL 2005 64ビット、SQL 2008、またはWindows Server 2008で変更されますか?

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

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

8
BradC

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

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

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

16

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

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

2
SqlACID

HP DL360G3上のSQLServer 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 
1
user66217