高パフォーマンスワークロードの SQL Server に対する推奨される更新と構成オプション

この記事には、SQL Server 2012 以降のバージョンで使用できるパフォーマンスの向上と構成オプションの一覧が含まれています。

元の製品バージョン: SQL Server 2014、SQL Server 2012
元の KB 番号: 2964518

この記事では、さまざまな製品更新プログラムと構成オプションを使用して、SQL Server 2014 および SQL Server 2012 バージョンで使用できるパフォーマンスの向上と変更について説明します。 これらの更新プログラムを適用して、SQL Serverのインスタンスのパフォーマンスを向上させることができます。 表示される改善の程度は、ワークロード パターン、競合ポイント、プロセッサ レイアウト (プロセッサ グループの数、ソケット、NUMA ノード、NUMA ノード内のコア)、およびシステムに存在するメモリの量など、さまざまな要因によって異なります。 SQL Serverサポート チームは、これらの更新プログラムと構成の変更を使用して、複数の NUMA ノードと多数のプロセッサを持つハードウェア システムを使用したお客様のワークロードに対して適切なパフォーマンス向上を実現しました。 サポート チームは、今後もこの記事を他の更新プログラムと共に更新する予定です。

ハイエンド システム ハイエンド システムは、通常、複数のソケット、ソケットあたり 8 コア以上、5 テラバイト以上のメモリを備えています。

注:

SQL Server 2016 以降のバージョンでは、この記事で説明されているトレース フラグの多くが既定の動作であり、これらのバージョンで有効にする必要はありません。

推奨事項は、次のように 3 つのテーブルにグループ化されます。

  • 表 1 に、ハイエンド システムでのスケーラビリティのために最も頻繁に推奨される更新プログラムとトレース フラグを示します。
  • 表 2 に、追加のパフォーマンス チューニングに関する推奨事項とガイダンスを示します。
  • 表 3 には、累積的な更新プログラムと共に含まれていた追加のスケーラビリティ修正が含まれています。

表 1. ハイエンド システムの重要な更新とトレース フラグ

次の表を確認し、SQL Serverのインスタンスが [該当するバージョンとビルド範囲] 列の要件を満たしていることを確認した後、トレース フラグ列でトレース フラグを有効にします。

注:

  • 該当するバージョンとビルドは、変更またはトレース フラグが導入された特定の更新プログラムを示します。 CU が指定されていない場合は、SP 内のすべての CU が含まれます。

  • 適用できないバージョンとビルドは、変更またはトレース フラグが既定の動作になった特定の更新を示します。 そのため、その更新プログラムを適用するだけでメリットが得られます。

重要

Always On環境でトレース フラグを使用して修正を有効にする場合は、可用性グループの一部であるすべてのレプリカで修正フラグとトレース フラグを有効にする必要があることに注意してください。

考慮するシナリオと症状 トレース フラグ 該当するバージョンとビルドの範囲 適用されないバージョンとビルド範囲 詳細を提供するサポート技術情報の記事/ブログ リンク
  • 高い CMEMTHREAD 待機が発生します。
  • SQL Serverは、ソケットあたり 8 個以上のコアを持つシステムにインストールされます。
T8048
  • SQL Server 2012 RTM to current Service Pack (SP)/CU
  • SQL Server 2014 RTM to SP1
  • SQL Server 2014 SP2 から現在の SP/CU へ
  • SQL Server 2016 RTM を現在の SP/CU に
  • SQL Server 2017 RTM から現在の SP/CU へ
  • 高い CMEMTHREAD 待機が発生します。
  • SQL Serverは、ソケットあたり 8 個以上のコアを持つシステムにインストールされます。
T8079 SQL Server 2014 SP2 から現在の SP/CU へ
  • SQL Server 2016 RTM を現在の SP/CU に
  • SQL Server 2017 RTM から現在の SP/CU へ
  • ログ プール キャッシュに依存する機能を使用しています。 (たとえば、Always On)
  • SQL Serverは、複数のソケットを持つシステムにインストールされます。
T9024 SQL Server 2012 Service Pack 1 から SP2 SQL Server 2014 RTM の累積的な更新プログラム パッケージ 3
  • SQL Server 2012 SP3 から現在の SP/CUSQL へ
  • Server 2014 SP1 から現在の SP/CU へ
  • SQL Server 2016 RTM を現在の SP/CU に
  • SQL Server 2017 RTM から現在の SP/CU へ
修正: SQL Server 2012 または SQL Server 2014 インスタンスの "ログ書き込み待機" カウンター値が高い
SQL Serverのインスタンスは、接続プールのために何千もの接続リセットを処理しています。 T1236 SQL Server 2012 Service Pack 1 の累積的な更新プログラム パッケージ 9 から SP2 SQL Server 2014 の累積的な更新プログラム 1
  • SQL Server 2012 SP3 から現在の SP/CUSQL へ
  • サーバー 2014 SP1 から現在の SP/CUSQL
  • Server 2016 RTM to current SP/CU
  • SQL Server 2017 RTM から現在の SP/CU へ
  • アプリケーション ワークロードには、tempdb の頻繁な使用 (一時テーブルまたはテーブル変数の作成と削除) が含まれます。
  • 割り当ての競合が原因で、tempdb ページ リソースを待機しているユーザー要求に気付きます。
T1118
  • SQL Server 2012 RTM から現在の SP/CU へ
  • SQL Server 2014 RTM から現在の SP/CU へ
  • SQL Server 2016 RTM を現在の SP/CU に
  • SQL Server 2017 RTM から現在の SP/CU へ
tempdb データベースのコンカレンシーの機能強化

メモ トレース フラグを有効にし、tempdb データベースの複数のデータ ファイルを追加します。
  • 複数の tempdb データ ファイルがあります。
  • 最初のデータ ファイルは、同じサイズに設定されます。
  • アクティビティが多いため、tempdb ファイルでは増加が発生し、すべてのファイルが同時に拡張され、割り当ての競合が発生するわけではありません。
T1117
  • SQL Server 2012 RTM から現在の SP/CU へ
  • SQL Server 2014 RTM から現在の SP/CU へ
  • SQL Server 2016 RTM を現在の SP/CU に
  • SQL Server 2017 RTM から現在の SP/CU へ
tempdb データベースでの割り当ての競合を減らすための推奨事項SQL Server
アドホック クエリ ワークロードでは、スピン SOS_CACHESTORE ロックの競合またはプランが頻繁に削除されています。 T174 なし
  • プラン キャッシュ内のエントリは、他のキャッシュまたはメモリ クラークの増加により削除されます
  • クエリの再コンパイルが頻繁に行われるため、CPU 使用率が高い
T8032
  • SQL Server 2012 RTM から現在の SP/CU へ
  • SQL Server 2014 RTM から現在の SP/CU へ
なし
テーブル内の行数が多いため、既存の統計は頻繁に更新されません。 T2371
  • SQL Server 2012 RTM から現在の SP/CU へ
  • SQL Server 2014 RTM から現在の SP/CU へ
なし
  • 統計ジョブの完了には長い時間がかかります。
  • 複数の統計更新ジョブを並列で実行できません。
T7471 SQL Server 2014 SP1 CU6 から現在の SP/CU へ なし SQL 2014 & SQL 2016 を使用した更新統計のパフォーマンスの向上
CHECKDB コマンドは、大規模なデータベースに長い時間がかかります。
  • T2562
  • T2549
    • SQL Server 2012 RTM から現在の SP/CU へ
    • SQL Server 2014 RTM から現在の SP/CU へ
    なし
    CHECKDB コマンドは、大規模なデータベースに長い時間がかかります。 T2566
    • SQL Server 2012 RTM から現在の SP/CU へ
    • SQL Server 2014 RTM から現在の SP/CU へ
    なし
    コンパイル時間の長い同時実行データ ウェアハウス クエリを実行すると、待機が RESOURCE_SEMAPHORE_QUERY_COMPILE 発生します。 T6498 SQL Server 2014 から SP1 の累積的な更新プログラム パッケージ 6
    • SQL Server 2014 SP2 から現在の SP/CUSQL へ
    • Server 2016 RTM to current SP/CU
    • SQL Server 2017 RTM から現在の SP/CU へ
    特定のクエリ パフォーマンスの問題のトラブルシューティングを行っています。オプティマイザーの修正は既定で無効になっています。 T4199
    • SQL SERVER 2012 RTM to SP4
    • SQL Server 2014 RTM to latest
    なし
    空間データ型を使用したクエリ操作を使用すると、パフォーマンスが低下します。
    • T6532
    • T6533
    • T6534
    • SQL Server 2012 SP3 から現在の SP/CU へ
    • SQL Server 2014 SP2 から現在の SP/CU へ
      • SQL Server 2016 RTM を現在の SP/CU に
      • SQL Server 2017 RTM から現在の SP/CU へ
        • クエリが検出 SOS_MEMORY_TOPLEVELBLOCKALLOCATOR され、CMEMTHREAD が待機します。
        • SQL Server プロセスで使用可能な仮想アドレス空間が少ない。
        T8075
        • SQL Server 2012 SP2 CU8 から現在の SP/CU へ
        • SQL Server 2014 RTM CU10 から現在の SP/CU へ
        • SQL Server 2016 RTM を現在の SP/CU に
        • SQL Server 2017 RTM から現在の SP/CU へ
        修正: SQL ServerでSQL Server プロセスの仮想アドレス空間が低い場合にメモリ不足エラーが発生する
        • SQL Serverは、大量のメモリを持つマシンにインストールされます。
        • 新しいデータベースの作成には長い時間がかかります。
        T3449
        • SQL Server 2012 SP3 CU3 から現在の SP/CU へ
        • SQL Server 2014 RTM CU14 から現在の RTM CU へ
        • SQL Server 2014 SP1 CU7 から現在の SP/CU へ
        • SQL Server 2016 RTM を現在の SP/CU に
        • SQL Server 2017 RTM から現在の SP/CU へ
        修正: 大量のメモリを持つシステムでデータベースを作成SQL Server、予想よりも長い時間がかかります

        表 2. SQL Serverのインスタンスのパフォーマンスを向上するための一般的な考慮事項とベスト プラクティス

        サポート技術情報の記事/オンライン リソースの書籍列の内容を確認し、[推奨されるアクション] 列のガイダンスの実装を検討してください。

        サポート技術情報の記事/オンライン ブック リソース 推奨処理
        並列処理の最大レベルを構成するサーバー構成オプション sp_configure ストアド プロシージャを使用して、サポート技術情報の記事に従って、SQL Serverのインスタンスの並列処理サーバー構成オプションの最大レベルを構成する方法に関する構成を変更します。
        SQL Serverのエディション別のコンピューティング容量制限 サーバー + クライアント アクセス ライセンス (CAL) ライセンスを使用するEnterprise Editionは、SQL Server インスタンスあたり 20 コアに制限されます。 コア ベースのサーバー ライセンス モデルには制限はありません。 すべてのハードウェア リソースを活用するために、SQL Serverのエディションを適切な SKU にアップグレードすることを検討してください。
        "バランス" 電源プランを使用する場合の Windows Server でのパフォーマンスの低下 記事を確認し、Windows 管理者と協力して、記事の「解決策」セクションに示されているいずれかのソリューションを実装します。
        K グループに NUMA ノードを手動で割り当てます。
        アドホック ワークロードの強制パラメーター化の最適化 プラン キャッシュ内のエントリは、他のキャッシュまたはメモリ クラークの増加により削除されます。 また、キャッシュがエントリの最大数に達すると、プラン キャッシュの削除が発生する可能性もあります。 上記のトレース フラグ 8032 に加えて、 アドホック ワークロード サーバーの最適化 オプションと 、FORCED PARAMETERIZATION データベース オプションも検討してください。
        SQL Server 2012 以降のバージョンでのバッファー プール メモリのページングを減らす方法Memory 構成とサイズ変更に関する考慮事項SQL Server SQL サービスのスタートアップ アカウント に [メモリ内のロック ページを有効にする] オプション (Windows) ユーザー権限を割り当てます。 SQL Server 2012 で "ロックされたページ" 機能を有効にする方法に関するページを参照してください。 最大サーバー メモリを、物理メモリの合計の約 90% に設定します。 [サーバー メモリ構成オプション] 設定で、アフィニティ マスク設定を使用するように構成されているノードからのみメモリが考慮されていることを確認します。
        SQL Serverページと大きいページについて説明します。...高パフォーマンス ワークロードで実行する場合のSQL Serverのチューニング オプション 特に分析またはデータ ウェアハウスワークロードを使用して、大量のメモリを持つサーバーがある場合は、TF 834 を有効にすることを検討してください。 列ストア インデックスを使用している場合は、TF 834 は推奨されないことに注意してください
        sp_configure ストアド プロシージャで使用できる "アクセス チェック キャッシュ バケット数" および "アクセス チェック キャッシュ クォータ" オプションの説明 アクセス チェックキャッシュ サーバー構成オプションを使用して、サポート技術情報の記事の推奨事項に従ってこれらの値を構成します。 ハイエンド システムの推奨値は次のとおりです。
        "アクセス チェック キャッシュ バケット数": 256
        "アクセス チェック キャッシュ クォータ": 1024

        ALTER WORKLOAD GROUPメモリ許可クエリ ヒント 大量のメモリ許可を使い果たすクエリが多い場合は、リソース ガバナー構成の既定のワークロード グループを既定の 25% から小さい値に減ら request_max_memory_grant_percent します。 新しいクエリ メモリ許可オプションは、SQL Serverで使用できます (min_grant_percentmax_grant_percent)
        インスタント ファイルの初期化 Windows 管理者と協力して、オンライン ブック トピックの情報に従って、SQL Server サービス アカウントに "ボリューム メンテナンス タスクの実行" ユーザー権限を付与します。
        SQL Serverの "autogrow" および "autoshrink" 設定に関する考慮事項 データベースの現在の設定を確認し、サポート技術情報の記事の推奨事項に従って構成されていることを確認します。
        データベース チェックポイント (SQL Server) ユーザー データベースで間接チェックポイントを有効にして、SQL Server 2012 および 2014 の I/O 動作を最適化することを検討してください。
        修正: SQL SERVER AG 環境と Logshipping 環境のプライマリ レプリカ とセカンダリ レプリカ のログ ファイルに対してディスクのセクター サイズが異なる場合の同期が遅い プライマリ レプリカのトランザクション ログが 512 バイトのセクター サイズのディスク上にあり、セカンダリ レプリカのトランザクション ログが 4K セクター サイズのドライブ上にある可用性グループがある場合、同期が遅くなる問題が発生する可能性があります。 このような場合、TF 1800 を有効にすると問題が修正されます。 詳細については、「 トレース フラグ 1800」を参照してください。
        SQL Serverがまだ CPU バインドされておらず、ワークロードに対して 1.5% から 2% のオーバーヘッドが無視できる場合は、起動トレース フラグとして TF 7412 を有効にすることをお勧めします。 このフラグを使用すると、SQL Server 2014 SP2 以降で軽量プロファイリングが可能になり、運用環境でライブ クエリのトラブルシューティングを実行できます。

        表 3. 累積的な更新プログラムに含まれるパフォーマンスの修正

        [現象] 列の説明を確認し、該当する環境の [必要な更新プログラム] 列に必要な更新プログラムを適用します。 それぞれの問題の詳細については、サポート技術情報の記事を参照してください。 これらの推奨事項では、スタートアップ パラメーターとして追加のトレース フラグを有効にする必要はありません。 これらの修正プログラムを含む最新の累積的な更新プログラムまたは Service Pack を適用するだけで、メリットを得ることができます。

        注:

        [必須の更新プログラム] 列の CU 名は、この問題を解決するSQL Serverの最初の累積的な更新プログラムを提供します。 累積的な更新プログラムには、以前のSQL Server更新プログラムのリリースに含まれていたすべての修正プログラムとすべての更新プログラムが含まれています。 そのため、問題を解決するために 、最新の累積的な更新プログラム をインストールすることをお勧めします。

        現象 必要な更新プログラム サポート技術情報の記事
        一時テーブルの Select-into 中に一括書き込みを行うと、パフォーマンスの問題が発生します。 SQL Server 2012 SP2 CU1
        SQL Server 2012 SP1 CU10
        修正: SQL Server 2012 で一時テーブル操作に対して選択を実行すると、I/O のパフォーマンスが低下する
        クエリ操作が中止された後に発生PWAIT_MD_RELATION_CACHEALTER INDEX ... ONLINEまたはMD_LAZYCACHE_RWLOCK待機します。 SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU9
        修正: ALTER INDEX... の後にパフォーマンスが低下します。オンライン操作は、2012 年SQL Serverまたは 2014 年SQL Serverに中止されます
        製品の標準エディションでは、クエリのパフォーマンスが突然低下します。 SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU7
        修正: スレッドは、SQL Server 2012 または SQL Server 2014 Standard Edition で均等にスケジュールされていません
        ページの平均寿命が急激に低下したため、パフォーマンスが低下します。 SQL Server 2012 SP1 CU4 修正: SQL Server 2012 でパフォーマンスの問題が発生する可能性がある
        NUMA 構成、大容量メモリ、および "最大サーバー メモリ" が低い値に設定されているシステムのリソース モニターによる CPU 使用率が高い。 SQL Server 2012 SP1 CU3 修正: サーバーに SQL Server 2012 をインストールした後にサーバーに負荷がない場合の CPU スパイク
        並べ替え用の割り当てメモリが、大量のメモリがインストールされているシステムで関連する大きなメモリ許可を実行している間、非生成スケジューラ。 SQL Server 2012 SP1 CU2 修正: 2012 年または SQL Server 2008 R2 で多数の CPU と大量のメモリを持つサーバー SQL Serverでクエリを実行すると、エラー 17883
        並べ替え演算子が、メモリが大きいシステム上のバッファー プール内の多数のバケットを走査する場合、非生成スケジューラ。 SQL Server 2012 SP1 CU1 修正: 2012 年SQL Serverでクエリを実行すると、"Scheduler でプロセスが生成されていないように見える" というエラー メッセージ
        複数の NUMA ノードと多数のコアを持つシステムでコンパイルするのに長い時間がかかる同時実行クエリを実行する場合の CPU 使用率が高くなります。 SQL Server 2012 SP2 CU1
        SQL Server 2014 RTM CU2
        修正: NUMA ハードウェア上のコア数が増え続けるにつれてクエリ コンパイル ワークロードがスケーリングされず、CPU の飽和状態がSQL Server
        並べ替え演算子のメモリ割り当ては、リモート ノードの割り当てのために、大きなメモリを持つ NUMA システムで完了するのに長い時間がかかります。 SQL Server 2012 SP1 CU3 修正: NUMA 環境でのパフォーマンスの問題をSQL Serverする
        SQL SERVERが大量の RAM を持つ NUMA マシンにインストールされ、SQL Serverに多数の外部ページがある場合、メモリ不足エラーが発生します。 SQL Server 2012 RTM CU1 修正: NUMA を使用するコンピューターで SQL Server 2012 のインスタンスを実行するとメモリ不足エラーが発生する
        大きなテーブル内の SOS_CACHESTORE 空間データ型に対してインデックスを作成する場合と SOS_SELIST_SIZED_SLOCK 、スピンロックの競合。 SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU7
        修正: 大きなテーブルの空間データ型にインデックスを作成すると、SQL Server 2012 または SQL Server 2014 でパフォーマンスが低下する
        大きなテーブルの空間データ型にインデックスを作成するときに、CMEMTHREAD の待機の種類が高くなります。 SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU7
        修正: SQL Server 2012 または SQL Server 2014 インスタンス内の大きなテーブルの空間データ型にインデックスを作成すると、SQL Serverのパフォーマンスが低下する
        および CMEMTHREAD によるパフォーマンスの SOS_PHYS_PAGE_CACHE 問題は、大容量メモリ コンピューターでのメモリ割り当て中に待機します。 SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU9
        修正: SQL Server 2012 または SQL Server 2014 の外部ページ処理中に NUMA 環境でパフォーマンスの問題が発生する
        CHECKDB コマンドは、大規模なデータベースに長い時間がかかります。 SQL Server 2014 の累積的な更新プログラム パッケージ 6 修正: DBCC CHECKDB/CHECKTABLE コマンドは、SQL Server 2012 または SQL Server 2014 で時間がかかる場合があります

        重要事項

        関連情報

        適用対象

        • SQL Server 2014 Enterprise
        • SQL Server 2014 Enterprise Core
        • SQL Server 2014 Business Intelligence
        • SQL Server 2014 Developer
        • SQL Server 2014 Standard
        • SQL Server 2014 Web
        • SQL Server 2014 Express
        • SQL Server 2012 ビジネス インテリジェンス
        • SQL Server 2012 Developer
        • SQL Server 2012 Enterprise
        • SQL Server 2012 Standard
        • SQL Server 2012 Web
        • SQL Server 2012 Enterprise Core