none
SQLserver 2012 Standard にてCPUが4つ以上使用させる事ができない RRS feed

  • 質問

  • 質問の方させて頂きます。
    現在環境はNutanixの仮想環境サーバーにDBはSQlserver 2012 Standard Edition (64-bit) ( Core ボリュームライセンス)として
    自社開発のクライアントサーバーシステムを運用しております。
    データ量の増大に伴い、レスポンスに大きな遅延が出る様になり、アプリケーションの改善と合わせて、SQlserver側の処理能力を向上させる為
    サーバーのCPUを現在4個(1コア1プロセッサ × 4個)から8個(1コア1プロセッサ × 8個)に増設しました。
    増設後、SQLServerを確認した所、サーバーのプロパティ→プロセッサよりCPU0~CPU7 とCPUは認識はされている様なのですが、タスクマネージャー等で監視した所、現状CPU4個までしか使用していない状態です。
    試しにSQLServerのサーバーのプロパティのプロセッサの関係の設定にCPU4つ以上チェックをした所、ライセンスが4個まででエラーとなってしまいます。
    上記の状況からSQLServerが使用するプロセッサ数を4個以上にする事ができる解決方法等がありましたら、ご教示頂ければと思います。
    尚、ライセンスについては4Coreライセンスを8個購入しており、未使用のライセンスがあるライセンスについては問題はない事、またStandard Edition であればCPUに制限はないという事はマイクロソフトサポートに確認し回答を頂いている状態です。


    2021年3月9日 9:46

回答

  • Hyper-V の場合は、私の記憶では  物理コア 1 ソケット/1 仮想コア * 8 の場合でも、仮想マシン側では 1ソケット/8 仮想コアと認識されるので、Standard Edition においても 8 論理コアを使用することができたと思いますが、残念ながら Nutanix では 物理コアを認識しているようなので、SQL Server Standard Edition の 4 ソケット以内の制限により、現状 仮想コアが 4個 しか使用できない状態になっているようです。

    ---
    03/11/2021 05:51:02,Server,不明,SQL Server detected 8 sockets with 1 cores per socket and 1 logical processors per socket<c/>
     8 total logical processors;
     using 4 logical processors based on SQL Server licensing.
    ---

    考えられる対処策としては、何れも難しいかもしれませんが、以下の感じでしょうか。

    1) SQL Server Enterprise Edition にアップグレードする。 (Developer Edition は本番環境では使用できないため。)

    2) CPU を 1ソケット/4コア などに変更する。

    [補足]

    対処方法ではないのですが、この環境では HyperThreadingが有効になっていないと思いますので、HT を有効化することで、OLTPがメインの環境であれば、CPU性能を1.* 倍に向上させることができることが期待できます。
    • 回答としてマーク sato h 2021年3月11日 6:06
    2021年3月11日 4:22

すべての返信

  • 以下のクエリ結果はどのようになりますでしょうか?

    select @@version
    go
    select parent_node_id, scheduler_id, cpu_id, status, is_online, is_idle from sys.dm_os_schedulers
    go

    少し気になっている点としては、SQL Server 2012 Standard Edition は、Hot add memory and CPU 機能がサポートされていないため、仮想OS起動時に 仮想コア 4個で起動している状態で、動的に仮想OSの仮想コアが 8個に増えるような設定をしていた場合、SQL Server Standard Edition の場合、仮想OSで動的に増えた仮想コアを認識することができなかったと思います。

    なお、上記のような状況の場合は、SQL Server サービスのみを再起動することで、認識させることが可能です。

    仮に上記のような状況であった場合の対処方法としては、SQL Server Enterprise Edition に変更する、もしくは、仮想OS側の設定で動的リソースにせず、リソースを固定するなどが考えられます。

    2021年3月10日 4:03
  • ご回答ありがとうございます。
    ご連絡頂きましたSQLを実行した結果を記載致します。
    select @@version の 結果 
    Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) 
    Oct 20 2015 15:36:27 
    Copyright (c) Microsoft Corporation
    Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
    select parent_node_id, scheduler_id, cpu_id, status, is_online, is_idle from sys.dm_os_schedulers の結果

    parent_node_id   scheduler_id   cpu_id   status   is_online   is_idle
    0   0   0   VISIBLE ONLINE   1   1
    0   1   1   VISIBLE ONLINE   1   0
    0   2   2   VISIBLE ONLINE   1   1
    0   3   3   VISIBLE ONLINE   1   0
    0   4   4   VISIBLE OFFLINE   0   1
    0   5   5   VISIBLE OFFLINE   0   1
    0   6   6   VISIBLE OFFLINE   0   1
    0   7   7   VISIBLE OFFLINE   0   1
    0   1048578   0   HIDDEN ONLINE   1   0
    64   1048576   0   VISIBLE ONLINE (DAC)   1   1
    0   1048579   1   HIDDEN ONLINE   1   1
    0   1048580   2   HIDDEN ONLINE   1   1
    0   1048581   3   HIDDEN ONLINE   1   1
    0   1048582   4   HIDDEN ONLINE   1   1
    0   1048583   5   HIDDEN ONLINE   1   1

    結果は以上となります。
    尚、作業内容としては動的に追加を行いました後に、後日サーバー自体のの再起動も実施致しましたが
    改善されませんでした。

    以上です。なにとぞよろしくお願い致します。
    2021年3月10日 6:26
  • Scheduler_id 4~7 がオフラインになっているので、確かに使用できていないですね。

    エディションも Standard Edition で間違いないですね。

    ちなみに、SQL Serverがインストールされた仮想OSの仮想コア設定は、現在は固定設定(動的ではない)になっていますでしょうか?
    また、再起動とは、OSの再起動でしょうか、それとも SQL Serverの再起動でしょうか?
    例えば、仮想OSの仮想コア設定を min 4, max 8 と設定されている場合、仮想OS起動時の仮想コア数が 4 であった場合、SQL Server としては、仮想コア数が 4 と判断されてしまうかと。

    なお、SQL Server エラーログから SQL Server がどのようにCPUを認識しているか、情報をいただくことはできますでしょうか?

    出力例 :「SQL Server detected 1 sockets with 4 cores per socket and 8 logical processors per socket, 8 total logical processors; using 8 logical processors based on SQL Server licensing.」

    以下の URL は SQL Server 2012 のものではありませんが、可能性として エディションの制約の可能性もあるかもしれません。

    SQL Server のエディション別の計算容量制限
    https://docs.microsoft.com/ja-jp/sql/sql-server/compute-capacity-limits-by-edition-of-sql-server?view=sql-server-ver15
    + Standard : 4 ソケットまたは 24 コアのいずれか小さいほうに制限


    仮に、仮想OSの仮想コア数設定が固定、かつ、エディションの制約にも合致しなかった場合は、SQL Serverの SKU情報 が不正な状態になっている可能性もあるかもしれません。

    問題の切り分けとして、仮想OSの仮想コア数設定が固定で仮想OSを立ち上げた状態で、エディションのアップグレードを実施することで現象が解消されるかを確認されてみてはどうでしょう?
    SQL ServerのSKU情報は、リソースデータベース (mssqlsystemresource) で保持され、エディションのアップグレードなどで本データベースの更新が行われるので、本現象が解消されると良いのですが。

    【第6回】基本から始める SQL Server【エディション アップグレード】
    https://www.nobtak.com/entry/sqlb06

    2021年3月10日 9:37
  • 再度ご回答頂きまして、ありがとうございます。

    まずは再起動の件ですが、OS毎再起動しております。また速度改善を目的として日々SQLserverの再起動も行っております。

    ご連絡頂きましたLOGの方確認できましたので、記載させて頂きます。

    Sqlserver のLOG

    03/11/2021 05:51:02,Server,不明,SQL Server detected 8 sockets with 1 cores per socket and 1 logical processors per socket<c/> 8 total logical processors; using 4 logical processors based on SQL Server licensing. This is an informational message; no user action is required.

    現状の仮想OSの状態を確認しました所、固定設定となっておりました。

    SQL Server のエディション別の計算容量制限及びエディションのアップグレートのサイトのご紹介もありがとうございました。

    SQL Server のエディション別の計算容量制限にかかっている様にも思われますが、一旦仮想OS起動状態でStandard Edition (64-bit) で再度アップグレートを試みてみようかと思います。

    尚、改善されない場合の対応としては、やはりDeveloper等上位のエディションへのアップグレードが必要となりますでしょうか?

    以上です。なにとぞよろしくお願い致します。

    2021年3月11日 1:33
  • Hyper-V の場合は、私の記憶では  物理コア 1 ソケット/1 仮想コア * 8 の場合でも、仮想マシン側では 1ソケット/8 仮想コアと認識されるので、Standard Edition においても 8 論理コアを使用することができたと思いますが、残念ながら Nutanix では 物理コアを認識しているようなので、SQL Server Standard Edition の 4 ソケット以内の制限により、現状 仮想コアが 4個 しか使用できない状態になっているようです。

    ---
    03/11/2021 05:51:02,Server,不明,SQL Server detected 8 sockets with 1 cores per socket and 1 logical processors per socket<c/>
     8 total logical processors;
     using 4 logical processors based on SQL Server licensing.
    ---

    考えられる対処策としては、何れも難しいかもしれませんが、以下の感じでしょうか。

    1) SQL Server Enterprise Edition にアップグレードする。 (Developer Edition は本番環境では使用できないため。)

    2) CPU を 1ソケット/4コア などに変更する。

    [補足]

    対処方法ではないのですが、この環境では HyperThreadingが有効になっていないと思いますので、HT を有効化することで、OLTPがメインの環境であれば、CPU性能を1.* 倍に向上させることができることが期待できます。
    • 回答としてマーク sato h 2021年3月11日 6:06
    2021年3月11日 4:22
  • たびたびご回答頂きましてありがとうございました。

    Nutanix側のCPUの設定自体を1ソケット/1コア × 8 から、1ソケット/2コア × 4に設定しなおす事でSQLServerの方も8コア認識してくれる事が
    確認出来まして、問題も解決致しました。

    ご助力頂きまして本当ありがとうございました。
    心より感謝致します。

    2021年3月11日 6:06