はじめに
SQL Server 2000 Service Pack 3 (SP3) 以降の Microsoft SQL Server では、既存の運用環境のお客様に、パフォーマンス低下の原因となる可能性のある予想されるプランの変更が表示されないようにするために、ほとんどの修正プログラムがクエリ オプティマイザに既定でオフの状態で提供されました。 当初、各修正プログラムは個別のトレース フラグの下で配信されていました。 後に、ほとんどのフラグが 1 つのトレース フラグ (4199) の下に結合されるように変更されました。 この新しいプラクティスは、次の更新プログラムから始まる複数のバージョンにわたって開始されました。
- SQL Server 2005 Service Pack 3 (SP3) 累積更新プログラム 6
- SQL Server 2008 Service Pack 1 (SP1) 累積的な更新プログラム パッケージ 7
- SQL Server 2008 R2 (RTM)
トレース フラグ 4199 は、将来のリリースで既定でオンになる予定の修正プログラムを収集するために使用されましたが、他のトレース フラグは、修正プログラムが現在の形式で既定でオンになることを意図していない状況に使用されました。 SQL Server 2016 RTM 以降、データベースCOMPATIBILITY_LEVEL設定は、トレース フラグ 4199 関連の修正プログラムを有効にするために使用されます。 この記事では、プランに影響する修正プログラムが SQL Server 2016 以降のバージョンに提供される方法の仕組みとポリシーについて説明します。
追加情報
SQL Server 2016 では、以前のリリースの SQL Server に対して行われたトレース フラグ 4199 修正プログラムは、データベース COMPATIBILITY_LEVEL 130 でトレース フラグ 4199 が有効になっていない状態で有効になります。 トレース フラグ 4199 は、130 の互換性レベルを使用して、将来のデータベース用 SQL Server 2016 修正プログラムをリリースするために使用されます。 トレース フラグ 4199 は、特定のパフォーマンスの問題が発生しているお客様にのみ推奨されるため、データベースを最新の互換性レベルに移行した後は、トレース フラグ 4199 を削除することをお勧めします。これは、トレース フラグ 4199 がアプリケーションに適用されず、運用システムで予期しないプランのパフォーマンス変更を引き起こす可能性がある将来の修正プログラムに再利用されるためです。 つまり、特定の製品リリースでサポートされている互換性レベルごとに、異なるトレース フラグ 4199 修正プログラムが有効になります。 最新の互換性レベルでは、トレース フラグ 4199 の下で以前のすべての修正プログラムが既に有効になっています。 つまり、データベースを最新の互換性レベルにアップグレードし、トレース フラグ 4199 を削除しても、データベースのアップグレード前にワークロードが利用していたすべての修正が引き続き有効になります。新しい修正は有効ではありません。 後で顧客にクエリ パフォーマンスの問題が発生した場合は、テスト環境でデータベース スコープ オプション QUERY_OPTIMIZER_HOTFIXES またはクエリ ヒント ENABLE_QUERY_OPTIMIZER_HOTFIXES を有効にして、問題が解決されているかどうかを判断します。 QUERY_OPTIMIZER_HOTFIXESに関するドキュメントを参照してください。
注釈既定では、SQL Server 2016 で作成されたデータベースは互換性レベル 130 を使用し、新しいオプティマイザー ロジックが既に有効になっています。
このモデルの主な利点は、アップグレード プロセス中の運用システムのリスクを軽減できることです。 この方法では、SQL Server の新しいメジャー バージョンのインストールと、すべての新しいクエリ プロセッサの変更の自動有効化が分離されます。 メジャー バージョン アップグレードではファイル形式が変更され、元に戻せないため、COMPATIBILITY_LEVEL設定を使用することをお勧めします。これにより、アップグレード中に予期しないプランのパフォーマンスの問題が見つかった場合に、顧客は迅速にダウングレードできます。 アプリケーションのアップグレードをブロックする予期しないプランの変更を顧客が見つけた場合、顧客は、クエリ ストアを使用して適切なプランのヒントを適用して前のプランを強制することで状況を緩和できます。または、Microsoft カスタマー サポートに連絡して問題を解決し、回避策または修正プログラムを提供することで状況を緩和できます。 すべての問題が軽減されたら、アップグレードを続行できます。 お客様は、この機能を SQL Server 2016 のアップグレード計画に統合する必要があります。
次の表は、SQL Server 2016 以降のトレース フラグ 4199 の動作のモデルを示しています。
| 設定 | SQL 互換性レベル | トレース フラグ 4199 | SQL Server 2016 RTM より前のオプティマイザー修正プログラム | SQL Server 2016 RTM 後のオプティマイザー修正プログラム |
|---|---|---|---|---|
| 1. | 120 | オフ | 無効 | 無効 |
| 2. | 120 | オン | 有効 | 無効 |
| 3. | 130 | オフ | 互換性レベルによって有効化 | 無効 |
| 4. | 130 | オン | 互換性レベルによって有効化 | 互換性レベルによって有効化 |
注: SQL Server 2016 に新しくアップグレードするお客様には、設定番号 3 をお勧めします。
SQL Server 2016 以降のメジャー リリースでは、Microsoft はこのサービス モデルをオプティマイザーの修正プログラムに引き続き使用する予定です。 既定または各リリースでは、以前のリリースのトレース フラグ 4199 修正プログラムはすべて、次の互換性レベルで有効になります。 つまり、最新の互換性レベルに移行した後の推奨状態は、トレース フラグ 4199 を無効にする状態になります。 それ以降の修正プログラムでは、トレース フラグ 4199 を使用して、アプリケーションでこれらの特定の修正プログラムを有効にする必要があるお客様の修正プログラムを有効にします。 アプリケーションを最新の互換性レベルにアップグレードした後は、トレース フラグ 4199 を無効にして、アプリケーションで予期せず将来のオプティマイザーの変更が予期せず有効になるのを防ぐことをお勧めします。 最新の互換性レベルにアップグレードし、トレース フラグ 4199 を削除しても、アップグレード前にワークロードが利用していたすべての修正が引き続き有効になります。新しい修正は有効ではありません。
注釈 多くのオプティマイザー修正プログラムはトレース フラグ 4199 の下で有効になりますが、一部では他のトレース フラグが使用されています。 トレース フラグ 4199 広く適用可能であり、将来のリリースで既定で有効になる可能性が高いトレース フラグをこれまで取り上げてきました。 代替トレース フラグは、条件がごく少数のお客様にしか限られていない場合、修正プログラムが原因で他の種類のアプリケーションでパフォーマンスが低下する可能性がある場合、またはすべてのユーザーに対して有効にする準備が整う前に内部機能が変更される可能性がある修正プログラムで使用されます。 Microsoft は、必要に応じて引き続き他のトレース フラグを使用して製品をサービスします。
注釈 この記事では、最新製品の最新の互換性レベルでトレース フラグ 4199 修正プログラムをリリースするモデルについて説明します。 (公開時点では、これは SQL Server 2016 です。)オプティマイザーの修正プログラムは、市販の古いバージョンの SQL Server またはより低い互換性レベル (120 以前) の SQL Server 2016 でリリースされる場合があります。 Microsoft はそれぞれのケースを評価し、トレース フラグ 4199 を使用するか、別のトレース フラグを使用するかを決定します。 修正プログラム以外の変更は、後の互換性レベルへの移動時にも有効になるため、アップグレード中にプランの変更が行われないという明確な保証はありません (トレース フラグ 4199 の有無にかかわらず)。 実稼働アプリケーションについては、常に互換性レベルへの変更を注意深くテストする必要があり、プランの選択に関連するパフォーマンスの問題がある場合は、クエリ ストアなどの軽減策テクノロジを使用する必要があります。
参考までに、以下のトレース フラグは、トレース フラグ 4199 が導入される前のクエリ プロセッサの修正プログラムに使用されていました。
4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4115, 4116, 4117, 4119, 4120, 4121, 4122, 4124, 4125, 4126, 4127, 4128, 4129, 4131, 4133, 4135.
SQL Server 2012 以降のバージョン
トレース フラグ 4199 は、SQL Server 2012 以降のリリース バージョンに含まれています。
トレース フラグ 4199 を有効にする方法
起動時またはユーザー セッションでトレース フラグ 4199 を有効にできます。 このトレース フラグは、グローバル レベルまたはセッション レベルの効果があります。 トレース フラグ 4199 を有効にするには、DBCC TRACEON コマンドを使用するか、スタートアップ パラメーターとして –T 4199 を使用します。
DBCC TRACEON\TRACEOFF を使用する場合、ストアド プロシージャの新しいキャッシュ プランは再生成されません。 トレース フラグなしで作成されたキャッシュにプランが存在する可能性があります。
トレース フラグを有効または無効にする方法、およびグローバル トレース フラグおよびセッション レベルのトレース フラグの説明については、SQL Server Books Online の以下のトピックを参照してください。
参考資料
SQL Server の更新プログラムの命名方式の関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
822499
Microsoft SQL Server ソフトウェア更新プログラム パッケージの新しい命名スキーマ
ソフトウェア更新プログラムに関する用語の関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
824684
Microsoft のソフトウェア更新の説明で使用される一般的な用語の解説