SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server 2016 におけるトレースフラグ 4199

leave a comment

オプティマイザの修正プログラムを適用するためのトレースフラグとして 4199 があります。
SQL Server 2016 におけるこのトレースフラグについての整理を。

データベース互換性モードの変更とクエリ ストアの使用 には以下のように記載されています。

新しいクエリ プロセッサの機能を有効にするためのアップグレード プロセスは、製品のリリース後のサービス モデルに関連付けられます。 それらの修正プログラムの一部は、トレース フラグ 4199 でリリースされます。 修正プログラムを必要とするユーザーは、他のユーザーにとって予期しない回帰を引き起こすことなくそれらの修正プログラムを適用できます。 クエリ プロセッサの修正プログラムのリリース後のサービス モデルは、ここに記載されています。 SQL Server 2016 では、新しい互換性レベルへに移行した場合、4199 トレース フラグは不要になります。これは、それらの修正プログラムは最新の互換モード (130) で既定で有効になっているためです。 そのため、アップグレード プロセスの一環として、アップグレード プロセスが完了したら、4199 が無効になっていることを検証することが重要です。

SQL Server 2016 の互換性レベルである「130」では、トレースフラグ 4199 が不要と記載されています。

SQL Server query optimizer hotfix trace flag 4199 servicing model には、以下のような表が記載されています。

image

互換性レベル 130 を設定している場合、TF4199 を有効にしないでも、SQL Server 2016 が RTM した段階で導入されていたオプティマイザの修正プログラムが互換性レベルで有効になった状態になります。
これは、「3.」の設定になりますが、TF4199 を有効にした互換性レベル 130 の組み合わせが「4.」として記載されています。

これは、SQL Server 2016 の RTM 後に導入されたオプティマイザの修正プログラムを有効にする場合の設定となります。
SQL Server の累積修正プログラムやサービスパックは RTM 後もリリースされ、その中ではオプティマイザの修正プログラムが導入される可能性があります。
そのような RTM 後に導入されたオプティマイザの修正を動作させる場合には、互換性レベル 130 を有効にし、トレースフラグ 4199 を設定する必要があるということですね。

SQL Server 2016 では、データベーススコープの構成 で、「QUERY_OPTIMIZER_HOTFIXES」を有効にすることで、トレースフラグによりインスタンス全体で、オプティマイザの修正プログラムを有効にするのではなく、特定のデータベースでのみ、RTM 以降に導入された変更を適用するということもできますので、一部のデータベースでのみ有効にするということや、AlwaysOn 可用性グループの環境では、セカンダリでのみ有効にし、影響を確認するということができますので、運用の柔軟性が上がっているかと思います。

Share

Written by Masayuki.Ozawa

11月 14th, 2016 at 12:04 am

Posted in SQL Server

Tagged with

Leave a Reply