データベース互換性レベルの変更とクエリ ストアの使用

適用対象: はいSQL Server (サポートされているすべてのバージョン) - Windows のみ

SQL Server 2016 (13.x) 以降では、一部の変更は、データベースの互換性レベルが変更された後に有効になります。 これは、次の理由のためです。

  • アップグレードは一方向の操作である (ファイル形式をダウン グレードできない) ため、データベース内で新機能を有効にする操作を別の操作に分離することが重要です。 以前のデータベース互換性レベルに設定を戻すことができます。 新しいモデルでは、停止期間中に発生する処理の数が減ります。

  • クエリ プロセッサに対する変更は、複雑な影響をもたらす可能性があります。 システムに対する "良い" 変更は、ほとんどのワークロードには有益であっても、その他のワークロードにとって重要なクエリで許容できない回帰を引き起こす可能性があります。 アップグレード プロセスからこのロジックを分離すると、クエリ ストアなどの機能は、プラン選択の回帰を迅速に緩和し、さらには実稼働サーバーで完全に回避できます。

重要

SQL Server 2017 (14.x) では、データベースを装着したか復元したとき、また、インプレース アップグレード後、以下の動作が予想されます。

  • アップグレード前のユーザー データベースの互換性レベルが 100 以上の場合は、アップグレード後も互換性レベルは変わりません。
  • アップグレード前のユーザー データベースの互換性レベルが 90 の場合、アップグレードされたデータベースの互換性レベルは 100 に設定されます。これは、SQL Server 2017 (14.x) でサポートされている下限の互換性レベルです。
  • tempdb、model、msdb、および Resource データベースの互換性レベルは、アップグレード後に現在の互換性レベルに設定されます。
  • master システム データベースは、アップグレード前の互換性レベルを保持します。

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

注意

ただし、RTM の後にリリースされた新しいクエリ プロセッサの修正プログラムを有効にするためには (該当する場合)、トレース フラグ 4199 が必要です。

以下のような、クエリ プロセッサを最新バージョンのコードにアップグレード場合に推奨されるワークフローについては、「新しい SQL Server にアップグレードするときにパフォーマンスの安定性を維持する」を参照してください。

クエリ プロセッサを最新バージョンのコードにアップグレードするための推奨ワークフローを示す図。

SQL Server Management Studio v18 以降では、ユーザーはクエリ調整アシスタントを使用して、推奨されるワークフローのガイドを得ることができます。 詳細については、「クエリ調整アシスタントを使用したデータベースのアップグレード」を参照してください。

参照

データベースの互換性レベルの表示または変更
クエリ ストアの使用シナリオ
ALTER DATABASE (Transact-SQL) 互換性レベル
クエリ調整アシスタントを使用したデータベースのアップグレード