web-dev-qa-db-ja.com

SQL ServerがすべてのCPUコア/スレッドを使用していない

SQL Serverのハードウェアをアップグレードした後、Windowsタスクマネージャで、SQLインスタンスが使用可能なスレッドの半分しか使用していないことに気付きました。

Task Manager

サーバーには次のハードウェアとソフトウェアがあります。

  • Windows 2008 R2 Enterprise 64ビットSP1
  • Intel Xeon E7-4870-4プロセッサー(40コア、80スレッド)
  • Microsoft SQL Server 2012 Enterprise Edition(64ビット)

ランニング select cpu_count from sys.dm_os_sys_infoは40を返します。

OSは80スレッドすべてを認識します。

サーバーの処理能力の半分しか使用されないのはなぜですか?

2つのサーバーに同じハードウェアとソフトウェアがあり、どちらも同じ動作を示します。

15
Moharrer

SQL Serverのエラーログでは、その理由がわかります。私はこれを顧客のシステムで見つけました(本当にGoogleジュースのメッセージを貼り付けただけです):

SQL Serverは、ソケットあたり8コア、ソケットあたり16の論理プロセッサ、合計64の論理プロセッサを持つ4つのソケットを検出しました。 SQL Serverライセンスに基づく40の論理プロセッサを使用します。これは情報メッセージです。ユーザーの操作は必要ありません。

here からおそらく説明が得られます:

既存のSQL EEサーバーライセンス(または期間中の現在のエンタープライズ契約に基づくアクセス権)のソフトウェアアシュアランスをお持ちのお客様向けに、SQL Server 2012へのアップグレードを可能にするEnterprise Editionのバージョンが作成されました。このバージョンには、インスタンスを制限する技術的な制限があります。 20プロセッサコア(ハイパースレッディングで40 CPUスレッド)のみを使用します。

概要:エラーログでは、エディションは次のいずれかとして報告されますEnterprise EditionまたはEnterprise Edition: Core-based Licensing。前者の場合、前述のカスタマーシステムの場合のように、使用可能なすべてのコアを使用するには、コアベースのライセンスを取得する必要があります。

それ以外の場合で、すべてのコアのライセンスをすでに取得している場合は、アフィニティマスクの設定を確認してください。特に、それらが設定されていて、基盤となるハードウェアがアップグレードされている場合は確認してください。

23
Jon Seigel

SQL Serverが最初に起動したときからERRORLOGを調べます。使用しているCPUの数と、その理由がわかります。 ERRORLOGファイルをどこかに投稿できれば、何が起こっているのかを確認するのに役立ちます。

7
mrdenny

私はこれを 別の投稿 でAjmer Dhariwalが見ました:

Enterpriseエディションの場合でも、適用されるライセンスモデルがサーバー+クライアントアクセスライセンス(CAL)ベースの場合、サーバーはインスタンスごとに20の物理コアに制限されます

3
Dom