第 4 世代インテル® Xeon® スケーラブル・プロセッサー上で OLTP 向けに SQL Server* をチューニング

この記事は、インテル® デベロッパー・ゾーンに公開されている「Microsoft* SQL Server* Tuning Guide for Online Transaction Processing workload on 4th Generation Intel® Xeon® Scalable Processors Based Platform」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。


この記事の PDF 版はこちらからご利用になれます。

公開日: 2022年11月7日

はじめに

本ガイドは、Microsoft* SQL Server* を使用するユーザー向けです。ほとんどの状況で最高のパフォーマンスを達成するハードウェアとソフトウェアの設定に関する推奨事項を示します。ただし、Microsoft* SQL Server* の展開方法はさまざまであり、ここで紹介するのはその一例であるため、特定のシナリオに合わせてこれらの設定を慎重に検討する必要があります。

Microsoft* SQL Server* は、Microsoft 社が開発したリレーショナル・データベース管理システムです。SQL Server* にはさまざまなエディションがありますが、本ガイドでは SQL Server* Enterprise Edition に注目します。SQL Server* のデータベース・アーキテクチャーは、クライアント・サーバー・アーキテクチャー・モデルに基づいています。本ガイドでは、オンライン・トランザクション処理 (OLTP) ワークロード (TPC-E-like) 向けに SQL Server* Windows* 版をチューニングします。

第 4 世代インテル® Xeon® スケーラブル・プロセッサーは、AI アクセラレーション機能を内蔵した、業界最高水準のワークロード最適化プラットフォームであり、マルチクラウドからインテリジェント・エッジまで、データ変革の効果を加速するシームレスなパフォーマンス基盤を提供します。このワークロード・アプリケーションに関連する改良点は以下のとおりです。

  • パフォーマンスの強化
  • インテル® ウルトラ・パス インターコネクト (インテル® UPI) リンクの増加
  • DDR5 メモリーの速度と容量の増加

本記事では、以下のハードウェアとソフトウェアを使用しました。

ハードウェア メモリー 32x 64GB Hynix DDR5、4400MT/秒
I/O コントローラー 4x インテル® RAID コントローラー RS3SC008
ディスク

1x インテル® SSD 1.90TB OS ドライブ

10x インテル® SSD SC2KG019T7 (1.90TB) バックアップ

8x インテル® SSD SC2KG960G8 (960GB) ログ

5x インテル® SSD SC2BA800G3 (800GB) TempDB

2x インテル® SSD SC2BB016T4 (1.60TB) mdf

85x インテル® SSD SC2KG960G8 (960GB) DB

NIC 2x インテル® イーサネット・コンバージド・ネットワーク・アダプター X520 シリーズ 210G BASE-T
ソフトウェア OS Microsoft* Windows Server* 2022 Datacenter
カーネル 10.0.20348 ビルド 20348
SQL バージョン 2022.160.1000.6
ワークロード・キット TPC-E キット 1041
Benchcraft 2.5.6

注: 本記事で説明するハードウェア構成は、第 4 世代インテル® Xeon® プロセッサーをベースにしています。サーバー・プラットフォーム、メモリー、ハードディスク、ネットワーク・インターフェイス・カードは、使用条件に応じて決定できます。

ハードウェア

BIOS

以下の BIOS 設定はすべて、第 4 世代インテル® Xeon® スケーラブル・プロセッサー向けに設計されたインテルのソフトウェア開発プラットフォームに基づいていることに注意してください。まず、BIOS をデフォルト設定にリセットし、その後、以下の提案に従って変更してください。

設定項目 推奨値

EDKII メニューから、[Socket Configuration] > [Processor Configuration] > [Hardware Prefetcher] を選択します。

無効

EDKII メニューから、[Socket Configuration] > [Processor Configuration] > [Adjacent Cache Prefetch] を選択します。

無効

EDKII メニューから、[Socket Configuration] > [Processor Configuration] > [DCU Streamer Prefetcher] を選択します。

有効

EDKII メニューから、[Socket Configuration] > [Processor Configuration] > [DCU IP Prefetcher] を選択します。

有効
EDKII メニューから、[Socket Configuration] > [Processor Configuration] > [LLC Prefetch] を選択します。 無効

EDKII メニューから、[Socket Configuration] > [Advanced Power Management Configuration] > [CPU P State Control] > [Energy Efficient Turbo] を選択します。

無効

EDKII メニューから、[Socket Configuration] > [Advanced Power Management Configuration] > [CPU P State Control] > [Turbo Mode] を選択します。

有効

EDKII メニューから、[Socket Configuration] > [UP Configuration] > [UPI General Configuration] > [Boot Performance Mode] を選択します。

最大パフォーマンス
EDKII メニューから、[Socket Configuration] > [Advanced Power Management Configuration] > [Hardware PM State Control] > [Hardware P State] を選択します。 無効
EDKII メニューから、[Socket Configuration] > [Advanced Power Management Configuration] > [CPU Advanced PM Tuning] > [Energy Perf BIAS] > [ENERGY_PERF_BIAS_CFG_mode] を選択します。 パフォーマンス
EDKII メニューから、[Socket Configuration] > [Advanced Power Management Configuration] > [CPU Advanced PM Tuning] > [Energy Perf BIAS] > [Workload Configuration] を選択します。 I/O 依存
EDKII メニューから、[Socket Configuration] > [Memory Configuration] > [Memory RAS Configuration] > [Patrol Scrub] を選択します。 無効
EDKII メニューから、[Socket Configuration] > [Advanced Power Management Configuration] > [CPU C State Control] > [Package C State] を選択します。 Co\C1 ステート
EDKII メニューから、[Socket Configuration] > [Advanced Power Management Configuration] > [CPU C State Control] > [Enhanced Halt State (C1E)] を選択します。 無効
EDKII メニューから、[Socket Configuration] > [Advanced Power Management Configuration] > [CPU C State Control] > [CPU C6 Report] を選択します。 無効
EDKII メニューから、[Socket Configuration] > [Advanced Power Management Configuration] > [CPU C State Control] > [CPU C1 auto demotion] を選択します。 無効
EDKII メニューから、[Socket Configuration] > [Advanced Power Management Configuration] > [CPU C State Control] > [CPU auto undemotion] を選択します。 無効
EDKII メニューから、[Socket Configuration] > [Common RefCode Configuration] > [UMA-Based Clustering] を選択します。 無効 (All2All)
EDKII メニューから、[Socket Configuration] > [Uncore Configuration] > [Uncore General Configuration] > [SNC (Sub NUMA)] を選択します。 SNC2 (2 クラスター) 有効

メモリー構成

このワークロードは、DDR5 レジスタード・メモリー (4400MT/秒) をチャネルあたり 2 DIMM 搭載した場合に最適に動作します。詳細は、プラットフォームのマニュアルを参照してください。

ストレージ

使用するドライブの種類と台数の詳細は下表のとおりです。各種ドライブセット (DB、TempDB、…) は RAID ボリュームに編成されており、DB ドライブは I/O コントローラーごとに RAID0 ボリュームに均等に分割されています。ただし、ログボリュームだけは例外で、RAID10 として構成されています。以下は RAID ボリュームの推奨設定で、Windows* 用のインテル® RAID ウェブ・コンソール 3 から設定できます。

ドライブの用途 RAID レベル ストライプサイズ (KB) 先読み ライトバック・キャッシュ・ポリシー ディスク・キャッシュ・ポリシー
DB 0 64 × ライトスルー 有効
Temp DB 0 64 × ライトスルー 有効
バックアップ 0 64 ライトスルー 有効
ログ 10 64 × ライトバック 有効

ネットワーク

このワークロードは、サーバーとクライアントを接続するすべてのアダプターに以下の設定を適用することで最適に動作します。

例えば、以下の PowerShell* スクリプトは、「Ethernet 2」 (say) を設定します。


$ Set-NetAdapterAdvancedProperty -Name "Ethernet 2" -RegistryKeyword '*JumboPacket' -RegistryValue '9014'

$ Set-NetAdapterRss -Name "Ethernet 2" -Enable 1 -BaseProcessorGroup 0 -BaseProcessorNumber 0 -MaxProcessors 16 -NumaNode 65535 -MaxProcessorGroup 0 -MaxProcessorNumber 16 -NumberOfReceiveQueues 8  -Profile Closest

さらに、SQL Server* で sp_configure コマンドを使用して以下の設定を行う必要があります。


$ sp_configure network_packet_size,8192

$ go

$ RECONFIGURE WITH OVERRIDE

$ go

ソフトウェアのチューニング

ソフトウェア設定のチューニングは不可欠です。オペレーティング・システムから SQL Server* の設定に至るまで、すべて汎用アプリケーション向けに設計されており、既定の設定で最高のパフォーマンスを発揮できることはほとんどありません。

Microsoft* Windows Server* 2022 の設定

設定項目 推奨値
Windows* ファイアウォール [コントロール パネル] > [Windows ファイアウォール] > [Windows ファイアウォールの有効化または無効化] (左側のペイン) で、プライベート・ネットワークとパブリック・ネットワークの両方で [Windows ファイアウォールを無効にする] を選択します。
視覚効果 [コンピューター] > [プロパティ] > [システムの詳細設定] > [詳細設定] > [パフォーマンス] > [設定] > [視覚効果] で [パフォーマンスを優先する] を選択します。
仮想メモリーの設定 [コンピューター] [プロパティ] [詳細設定] で [仮想メモリー] 以下にある変更ボタンをクリックして、表示されたダイアログで [カスタム サイズ] を選択し、[初期サイズ] と [最大サイズ] を 4096 に設定します。
電源オプション [コントロール パネル] > [ハードウェアとサウンド] > [電源オプション] > [高パフォーマンス] を選択します。
ラージページの有効化 [ファイル名を指定して実行] を選択し、「gpedit.msc」を入力して [OK] をクリックします。表示される [ローカル グループ ポリシー エディター] で [コンピューターの構成] [Windows の設定] [セキュリティの設定] [ローカル ポリシー] [ユーザー権利の割り当て] で [メモリ内のページのロック」 にユーザーまたは Administrators グループ (または SQL Server* で使用するユーザー) を追加します。そして、変更を反映するため、コンピューターを再起動します。
Windows Defender* の削除 Powershell* コマンド: Remove-WindowsFeature -Name Windows-Defender-Features

OLTP アーキテクチャー

TPC-E-like ワークロードは、ブローカー、顧客、およびリアルタイムの証券取引所に関連する一般的なやり取りをシミュレートするトランザクションで構成されています。これらのトランザクションは、ディスクの入出力と CPU の使用がバランスよく混在するように意図されています。パフォーマンスは 1 秒あたりのトランザクション数で測定され、tpsE として報告されます。

OLTP ベンチマークのハードウェア構成例:

OLTP ワークロード向けの SQL Server* のチューニング

以下の sp_configure コマンドを使用して、SQL Server* を設定する必要があります。


$ sp_configure show_advanced_options,1

$ go

$ RECONFIGURE WITH OVERRIDE

$ go

$ sp_configure backup_compression,1

$ go

$ RECONFIGURE WITH OVERRIDE

$ go

$ sp_configure "default trace enabled",0

$ go

$ RECONFIGURE WITH OVERRIDE

$ go

$ sp_configure lightweight_pooling,1

$ go

$ RECONFIGURE WITH OVERRIDE

$ go

$ sp_configure max_degree_of_parallelism,1

$ go

$ RECONFIGURE WITH OVERRIDE

$ go

$ sp_configure max_serv,<This number should be equal to 90% of system memory>

$ go

$ RECONFIGURE WITH OVERRIDE

$ go

$ sp_configure max_worker_threads,3000

$ go

$ RECONFIGURE WITH OVERRIDE

$ go

$ sp_configure priority_boost,1

$ go

$ RECONFIGURE WITH OVERRIDE

$ go

$ sp_configure recovery_interval,32767

$ go

$ RECONFIGURE WITH OVERRIDE

$ go

$ sp_configure remote_query_timeout,0

$ go

$ RECONFIGURE WITH OVERRIDE

$ go

$ sp_configure set_working_set_size,1

$ go

$ RECONFIGURE WITH OVERRIDE

$ go

$ sp_configure network_packet_size,8192

$ go

$ RECONFIGURE WITH OVERRIDE

$ go

OLTP ワークロードを実行する前に SQL Server* を起動する際に、コマンドラインで以下のフラグを使用する必要があります。

$ Sqlservr.exe -x -c -T827 -T652 -T661 -T834 -T3502 -T3979 -T8040 -T8095 -T8099 -T8088 -T8744 -T9038 -T8101

関連ツール

Microsoft* Windows* パフォーマンス・モニター (Perfmon) を使用して、システムおよびディスクの全体的なパフォーマンス・メトリックを監視できます。

テストと検証のベスト・プラクティス

このワークロードは、データベースをバックアップから復元し、システムを再起動した直後に実行するのが最適です。このワークロードを実行すると、すべての論理プロセッサーの CPU 使用率が 99% になるはずです。CPU カーネルの使用率は 12% 程度が望ましいでしょう。このワークロードは、約 850K IOPS、ランダムアクセス、および 90/10 の Read/Write 比率を特徴とする I/O 集約型のワークロードです。このワークロードのクライアントは、テスト中のシステムに対して 500 以上の同時接続でトランザクションを開始して実行します。このワークロードは、メモリー容量よりもメモリー速度に依存します。通常、このワークロードは、メモリーサイズがデータベース・サイズの約 3% に相当するときにピーク・パフォーマンスに達します。データベースの整合性の検証については、「関連情報」セクションの TPC-E キットを参照してください。TPC-E キットは、TPC-E ベンチマーク仕様に基づく監査に適した検証ツールを提供します。

まとめ

ここでは、OLTP ベンチマークを使用して、第 4 世代インテル® Xeon® スケーラブル・プロセッサーで最適なベンチマーク結果を得る方法を紹介しました。また、最高のパフォーマンスを得るためのソフトウェアとハードウェアの構成に関する注意点も説明しました。

関連情報

Microsoft* SQL Server*
トランザクション処理性能評議会 (英語)
TPC-E ベンチマーク・キット 1.14.0 (英語)


製品および性能に関する情報

1 性能は、使用状況、構成、その他の要因によって異なります。詳細については、http://www.intel.com/PerformanceIndex/ (英語) を参照してください。

関連記事