はじめに
Microsoft SQL Serverのバージョンは、SQL Server 2000 Service Pack 3 (SP3) より後のバージョンで、パフォーマンスの低下を引き起こす可能性のある計画の変更が既存の運用環境のお客様に表示されないように、既定以外の状態でほとんどの修正プログラムをクエリ オプティマイザーに配信しました。 最初に、各修正プログラムは個別のトレース フラグの下で配信されました。 その後、ほとんどのフラグが 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 関連の修正プログラムが既定で有効になります。 この記事では、プランに影響を与える修正プログラムを 2016 以降のバージョンSQL Server配信する方法の仕組みとポリシーについて説明します。
追加情報
SQL Server 2016 では、以前のリリースのSQL Serverに対して行われたトレース フラグ 4199 修正プログラムは、トレース フラグ 4199 が有効になっていないデータベース COMPATIBILITY_LEVEL 130 で有効になります。 トレース フラグ 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 のアップグレード計画に統合する必要があります。
次の表では、トレース フラグ 4199 が SQL Server 2016 以降でどのように機能するかを示します。
| 設定 | SQL 互換性レベル | トレース フラグ 4199 | 2016 RTM をSQL Serverする前のオプティマイザー修正プログラム | SQL Server 2016 RTM 後のオプティマイザー修正プログラム |
|---|---|---|---|---|
| 1. | 120 | オフ | 無効 | 無効 |
| 2. | 120 | オン | 有効 | 無効 |
| 3. | 130 | オフ | 互換性レベルで有効 | 無効 |
| 4. | 130 | オン | 互換性レベルで有効 | 互換性レベルで有効 |
注 2016 年SQL Serverに新しくアップグレードする場合は、no. 3 を設定することをお勧めします。
2016 年SQL Server以降のメジャー リリースの場合、Microsoft はこのサービス モデルをオプティマイザー修正プログラムに引き続き使用する予定です。 既定または各リリースでは、以前のリリースのトレース フラグ 4199 修正プログラムは、次の互換性レベルで有効になります。 つまり、最新の互換性レベルに移行した後に推奨される状態は、トレース フラグ 4199 を無効にすることです。 以降の修正プログラムでは、トレース フラグ 4199 を使用して、アプリケーションでこれらの特定の修正プログラムを有効にする必要があるお客様の修正プログラムを有効にします。 アプリケーションが最新の互換性レベルにアップグレードされた後にトレース フラグ 4199 を無効にして、アプリケーションで予期しない将来のオプティマイザーの変更が予期せず有効にならないようにすることをお勧めします。 最新の互換性レベルにアップグレードし、トレース フラグ 4199 を削除しても、ワークロードがアップグレード前に利用していたすべての修正が、新しい修正プログラムではなく有効になります。
メモ 多くのオプティマイザー修正プログラムはトレース フラグ 4199 で有効になっていますが、他のトレース フラグを使用するものもあります。 トレース フラグ 4199 は、広く適用可能であり、将来のリリースで既定で有効になる可能性が高いトレース フラグについて説明しました。 代替トレース フラグは、条件がごく少数の顧客のみに非常に固有の修正プログラムで使用されます。この修正プログラムは、他の種類のアプリケーションでパフォーマンス低下を引き起こす可能性があります。また、すべてのユーザーに対して有効になる準備が整う前に内部機能に変更が表示される場合があります。 Microsoft は、製品にサービスを提供するために必要に応じて、引き続き他のトレース フラグを使用します。
メモ この記事では、最新の製品の最新の互換性レベルでトレース フラグ 4199 修正プログラムをリリースするためのモデルについて説明します。 (公開時点では、これは 2016 年SQL Serverです)。オプティマイザーの修正プログラムは、SQL Serverの以前の市場バージョン、または 2016 年の下位互換性レベル (120 以前) でリリースSQL Server可能性があります。 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オンライン ブックの次のトピックを参照してください。
参考資料
SQL Server の更新プログラムの命名方式の関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
822499
Microsoft SQL Server ソフトウェア更新プログラム パッケージの新しい名前付けスキーマ
ソフトウェア更新プログラムに関する用語の関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
824684
Microsoft のソフトウェア更新の説明で使用される一般的な用語の解説