高パフォーマンスワークロードを使用する 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 テラバイト以上のメモリを備えています。

Note

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

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

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

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

次の表を確認し、SQL Server のインスタンスが Applicable Version and build ranges 列の要件を満たしていることを確認した後、トレース フラグ列でトレース フラグを有効にします。

Note

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

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

重要

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

考慮すべきシナリオと症状 トレース フラグ 該当するバージョンとビルドの範囲 該当しないバージョンとビルド範囲 詳細を提供するナレッジ ベースの記事/ブログ リンク
  • CMEMTHREAD の待機時間が長くなります。
  • SQL Server は、ソケットあたり 8 つ以上のコアを持つシステムにインストールされます。
T8048
  • SQL Server 2012 RTM から現在の Service Pack (SP)/CU
  • SQL Server 2014 RTM から 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 の累積的な更新プログラム パッケージ 3 SP2 SQL Server 2014 RTM
  • 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
  • Server 2014 SP1 から現在の SP/CUSQL
  • サーバー 2016 RTM から現在の 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
SQL Server tempdb データベースの割り当て競合を軽減するための推奨事項
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 を使用した Update Statistics のパフォーマンスの向上
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 の累積的な更新プログラム パッケージ 6 SP1
    • SQL Server 2014 SP2 から現在の SP/CUSQL
    • サーバー 2016 RTM から現在の SP/CU
    • SQL Server 2017 RTM から現在の SP/CU
    特定のクエリ パフォーマンスの問題のトラブルシューティングを行っています。オプティマイザーの修正プログラムは既定で無効になっています。 T4199
    • SQL Server 2012 RTM から SP4
    • SQL Server 2014 RTM から最新
    なし
    空間データ型でクエリ操作を使用すると、パフォーマンスが低下します。
    • 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 インスタンスのパフォーマンス向上に関する一般的な考慮事項とベスト プラクティス

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

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

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

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

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

        Note

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

        現象 必要な更新プログラム サポート技術情報の記事
        一時テーブルの選択時に一括書き込みを行うと、パフォーマンスの問題が発生します。 SQL Server 2012 SP2 CU1
        SQL Server 2012 SP1 CU10
        修正: SQL Server 2012 で一時テーブルの選択操作を実行すると、I/O のパフォーマンスが低下する
        ALTER INDEX ... ONLINEクエリ操作が中止された後、PWAIT_MD_RELATION_CACHEまたはMD_LAZYCACHE_RWLOCK待機します。 SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU9
        修正: ALTER INDEX の後にパフォーマンスが低下します...SQL Server 2012 または SQL Server 2014 でオンライン操作が中止される
        製品の標準エディションでクエリが突然正常に実行されません。 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 修正: SQL Server 2012 または SQL Server 2008 R2 で多数の CPU と大量のメモリを持つサーバーでクエリを実行する場合のエラー 17883
        並べ替え演算子がメモリが大きいシステム上のバッファー プール内の多数のバケットを走査する場合、非生成スケジューラ。 SQL Server 2012 SP1 CU1 修正: SQL Server 2012 でクエリを実行すると、"Scheduler でプロセスが生成されていないように見える" というエラー メッセージ
        複数の NUMA ノードと多数のコアを持つシステムでコンパイルに時間がかかる同時実行クエリを実行する場合の CPU 使用率が高くなります。 SQL Server 2012 SP2 CU1
        SQL Server 2014 RTM CU2
        修正: NUMA ハードウェア上のコア数の増加に伴ってクエリ のコンパイル ワークロードが拡張されず、SQL Server で CPU の飽和状態が発生する
        並べ替え演算子のメモリ割り当ては、リモート ノードの割り当てにより、メモリが大きい NUMA システムで完了するのに長い時間がかかります。 SQL Server 2012 SP1 CU3 修正: NUMA 環境での SQL Server のパフォーマンスの問題
        メモリ不足 大量の RAM を持つ NUMA マシンに SQL Server がインストールされていて、SQL Server に多数の外部ページがある場合のエラーです。 SQL Server 2012 RTM CU1 修正: NUMA を使用するコンピューターで SQL Server 2012 のインスタンスを実行するとメモリ不足エラーが発生する
        大きなテーブルの空間データ型にインデックスを作成するときに、 SOS_CACHESTORESOS_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 のパフォーマンスが低下する
        SOS_PHYS_PAGE_CACHEおよび CMEMTHREAD が大容量メモリ コンピューターでのメモリ割り当て中に待機するため、パフォーマンスの問題が発生しました。 SQL Server 2014 RTM CU1
        SQL Server 2012 SP1 CU9
        修正: SQL Server 2012 または SQL Server 2014 の外部ページ処理中に NUMA 環境でパフォーマンスの問題が発生する
        CHECKDB コマンドは、大規模なデータベースに長い時間がかかります。 SQL Server 2014 の累積的な更新プログラム パッケージ 6 修正: SQL Server 2012 または SQL Server 2014 で DBCC CHECKDB/CHECKTABLE コマンドに時間がかかる場合がある

        重要な注意事項

        関連情報

        適用対象

        • 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 Business Intelligence
        • SQL Server 2012 Developer
        • SQL Server 2012 Enterprise
        • SQL Server 2012 Standard
        • SQL Server 2012 Web
        • SQL Server 2012 Enterprise Core