CPUクロック速度とCPUコア数の比較-より高いGHzか、それともSQL Serverのコアが多いですか?


30

VMware内のSQL Server 2016ノードの仮想クラスターに一連の物理サーバーのプロビジョニングを開始しています。Enterprise Editionライセンスを利用します。

6つのノードのセットアップを計画していますが、CPUクロック速度とCPUコアカウントに関して、物理サーバーをプロビジョニングする理想的な方法については少し議論があります。

これは、トランザクション量と他のソフトウェア固有の要因の中で保存されているデータベースの数に大きく依存することを知っていますが、推奨される一般的な経験則はありますか?

たとえば、デュアル8コア、3.2 GHz物理サーバー(16コア)は、デュアル16コア、2.6 GHzサーバー(32コア)よりも優先されますか?

このタイプのトピックをさらに掘り下げたホワイトペーパーに出会った人はいますか?


あなたの懸念、要約またはライセンスのパフォーマンス、および費用対効果は何ですか?
エヴァンキャロル

回答:


40

一般的な経験則では、コアカウントをできるだけ低く保ち、プロセッサの速度をできるだけ高くします。ライセンスの計算により、Expensive Editionのコアあたり最大$ 7,500 USDであることが証明されます。

適切なハードウェアを購入することで、ライセンス費用を削減できます。Glenn BerryによるSQL Serverのプロセッサの選択を参照してください。SQL Serverのプロセッサを選択する方法に関する優れたリソースです。

SQL Serverのコアごとのライセンス構造を考慮すると、ワークロードの種類(OLTPまたは分析)に関係なく、常に利用可能な最速のプロセッサ速度を使用することが理にかなっています。可能な限り最速のコア速度を持つことは決して問題になりません。必要に応じてコア数を増やしますが、コア速度を落とすことでそれを行わないでください。

つまり、16 x 2.2Ghzプロセッサが8 x 4.5Ghzプロセッサと同じだと考えないでください。4.5Ghzプロセッサーより2.2Ghzプロセッサーを使用する場合のコスト削減は、最大で約$ 10,000 USD(一般的なXeonベースの2プロセッサーマシンの場合)です。SQL Server Enterprise Editionを使用して8コアから16コアに移行すると、ライセンス料が60,000米ドル以上かかる可能性があります。言い換えれば、ハードウェアコストで10,000ドルを節約できますが、ライセンスで余分に50,000ドルを失うことになります。

多くの並列処理マッスルが必要であると判断し、手元のタスクに32コアが必要であると判断した場合、最速のコアを使用すると、処理時間を短縮できます。誰もあなたのせいにしないでしょう。

選択肢は一つのCPUまたは複数のCPUであれば、常に一緒に行く、すべてのことを言っても、複数の。SQL Server(または任意のDBMS)を単一のCPUで実行すると、同時操作の機能が非常に制限されるため、あらゆる種類の問題が発生する可能性があります。


11

ホールドホールドホールドホールドオン

パフォーマンスとライセンスの側面は興味深いものですが、ワークロードの考慮すべき唯一の側面ではありません。

プロセッサの選択に影響を与える可能性があるのは、ワーカースレッドです。

ワーカースレッド?

うん、バディ!それらは、SQL Serverがクエリを実行し、物事を形に保つために必要なすべてのバックグラウンド処理を行うために使用するものです。

ワーカースレッドが不足すると、THREADPOOLの待機が発生します

スレッドプール?

スレッドプール。これは、RESOURCE_SEMAPHOREおよびRESOURCE_SEMAPHORE_QUERY_COMPILEとともに、サーバー上で行うことができる最も厄介な待機の1つです。しかし、これらはメモリ待機であり、これはCPUの問題です。

なぜこれが機敏な奇策であるかに戻ってください。

SQL Serverがワーカースレッドを計算する方法は次のとおりです。

ナッツ

コアカウントを2倍にしてもMax Worker Threadsが2倍にならないことに注目してください。1コアでも4コアと同じ数になりますか?方程式は次のとおりです。512 + ((logical CPUs - 4) * 16)

コアカウントが上がると、クロック速度は通常1世代または2世代前に急降下するため、これは残念です。

ナッツ

Intelチップの最近のラインを見てみると、同様の傾向が見られます。

必要なスレッド数を知るにはどうすればよいですか?

これは次のことに大きく依存します。

  • ユーザー数
  • 並列クエリの数
  • シリアルクエリの数
  • データベースの数とデータの同期(ミラーリング、AG、ログ配布のバックアップ)
  • MAXDOPおよびCTFPをデフォルトのままにする場合

今日それらを使い果たしていないなら、あなたはおそらく大丈夫です。

しかし、あなたがどのようにしているかはどうやってわかりますか?

良い質問があり、そして偉大な質問があり、そしてレムはあなたに何か、教えてGREAT質問を

THREADPOOLは接続の問題として現れることがあり、エラーログにスレッド生成できないというメッセージが表示される場合があります

また、sp_Blitzやsp_BlitzFirstなどの無料ツールを使用して、サーバーの待機統計を確認することもできます(完全公開、このプロジェクトに貢献します)。

EXEC sp_Blitz

ナッツ

EXEC sp_BlitzFirst @SinceStartup = 1

ナッツ

Max Worker Threadsを増やすことはできませんか?

MWTを増やすと、SOS_SCHEDULER_YIELD待機時間が長くなる可能性があります。

それは世界の終わりではありませんが、それは先生のクラスに子供たちの叫び声を上げるようなものだと考えてください。

突然、各子供が注意を引くのが難しくなります。

プロセスが4msのクォンタムを使い果たすと、CPUに到達するのを待機しているスレッドの前にさらに多くのスレッドが存在する可能性があります。

パフォーマンスはほぼ同じように感じるかもしれません。

使用するワーカースレッドを減らすにはどうすればよいですか?

あなたは[名詞]の残酷な[名詞]、それらは支援する家族と労働者です!住宅ローン!夢!

しかし、申し分なく、一番下の行を尊重しなければなりません。あなたは上司です。

開始する最も簡単な場所は、MAXDOPや並列処理のコストしきい値などの設定をデフォルトから変更することです。

これらの設定方法について質問がある場合は、こちらをご覧ください。

その後、あなたの仕事はかなり難しくなります。これらすべてのスレッドを使用しているものを把握する必要があります。待機統計を確認することでそれを行うことができます。

より具体的には、並列処理のCXPACKET待機LCK_時間が長く()、ロックの待機時間が長い()場合、並列クエリを含む長いブロッキングチェーンに陥っている可能性があります。

何が悪臭を覚えていますか?これらの並列クエリはすべて、ロックの取得を待機していますが、割り当てられたスレッドを返しません。

管理者が4コアのVMで、空気を切らしているワークロードには十分すぎることを保証していると聞いたことがありますか?

残念ながら、そのような問題を解決するために必要なクエリとインデックスのチューニングの種類は、質問の範囲を超えています。

お役に立てれば!


2

コミュニティwikiの回答

その長所と短所は次のとおりです。SQLServerのほとんどのワークロードはOLTPであり、シリアル操作であるため、より高いクロック速度の恩恵を受けます。

超並列システム向けに特別に設計している場合を除き、クロック速度は常に優先されます。エッジケースは存在しますが、それは95%の回答です。費用が安くなるという事実も素晴らしいことです。


-3

答えはこれに帰着します:それはユースケースに依存します。

  • 一度に複数の小さなリクエストを処理していますか、それともいくつかの大きなリクエストを処理していますか?
  • 実行するプログラムはマルチコア向けに最適化されていますか?

たとえば、クアッドコアコンピューターがありますが、ESP8266コンパイラーは1つのコアのみを使用するように設計されているため、CPUの25%しか使用しません。高速コアが1つあれば、それが最適です。


6
こんにちは、dba.stackexchange.comようこそ!あなたの答えは非常に一般的な場合に当てはまりますが、OPが求めているSQLやデータベースの場合には焦点を当てていません。その点でさらに深くして、改善してみてください!:)
xDaizu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.