概要
この更新プログラムにより、新しいクエリ ヒント引数 USE HINT が導入されます。これにより、管理者特権の資格情報または sysadmin サーバー ロールのメンバーにならなくてもクエリ オプティマイザーを駆動できます。 この新しいクエリ ヒントの構文は、次のようになります。
<query_hint > ::=
{
USE HINT(N'key' [ [, ]...n ])
}
この更新プログラムでは、USE HINT 引数で使用できる次のヒント オプションも導入されています。
| オプション | 同等のトレース フラグ | 説明 | 対象製品 |
|---|---|---|---|
| ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS | TF 9476 | SQL Server 2014 (12.x) 以降のクエリ オプティマイザーのカーディナリティ推定モデルで、結合に対して既定の基本包含の仮定ではなく、SQL Server でクエリ プランを生成させます。 | |
| ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES | TF 4137 | 相関関係を考慮するフィルターの AND 述語を推定するときに、SQL Server は最小選択性を使用してプランを生成します。 このヒント名は、SQL Server 2012 (11.x) 以前のバージョンのカーディナリティ推定モデルで使用する場合にはトレース フラグ 4137 と並行し、SQL Server 2014 (12.x) 以降のカーディナリティ推定モデルでトレース フラグ 9471 を使用する場合には同様の効果があります。 | |
| DISABLE_BATCH_MODE_ADAPTIVE_JOINS | バッチ モードのアダプティブ結合を無効にします。 | SQL Server 2017 以降 | |
| DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK | バッチ モード メモリ許可フィードバックを無効にします。 | SQL Server 2017 以降 | |
| DISABLE_DEFERRED_COMPILATION_TV | テーブル変数の遅延コンパイルを無効にします。 | SQL Server 2019 以降 | |
| DISABLE_INTERLEAVED_EXECUTION_TVF | 複数ステートメントのテーブル値関数のインターリーブ実行を無効にします。 | SQL Server 2017 以降 | |
| DISABLE_OPTIMIZED_NESTED_LOOP | TF 2340 | クエリ プランを生成するときに、最適化された入れ子になったループ結合に対して並べ替え操作 (バッチ並べ替え) を使用しないようにクエリ プロセッサに指示します。 | |
| DISABLE_OPTIMIZER_ROWGOAL | TF 4138 | SQL Server は、次のキーワードを含むクエリを使用して行目標の変更を使用しないプランを生成します。
|
|
| DISABLE_PARAMETER_SNIFFING | TF 4136 | 1 つ以上のパラメーターを持つクエリをコンパイルする際に平均データ分布を使用するようにクエリ オプティマイザーに指示します。 この命令により、クエリ プランは、クエリのコンパイル時に最初に使用されたパラメーター値から独立します。 このヒントを使用して、データベース スコープ付き構成設定 PARAMETER_SNIFFING=OFF をオーバーライドします。 | |
| DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK | 行モードのメモリ許可フィードバックを無効にします。 | SQL Server 2019 以降 | |
| DISABLE_TSQL_SCALAR_UDF_INLINING | スカラー UDF インラインを無効にします。 | SQL Server 2019 以降 | |
| DISALLOW_BATCH_MODE | バッチ モードの実行を無効にします。 | SQL Server 2019 以降 | |
| ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS | TF 4139 | カーディナリティの推定が必要な先頭インデックス列に対して、自動的に生成されるクイック統計 (ヒストグラム修正) を有効にします。 カーディナリティの推定に使用されるヒストグラムは、この列の実際の最大値または最小値を考慮するように、クエリのコンパイル時に調整されます。 | |
| ENABLE_QUERY_OPTIMIZER_HOTFIXES | TF 4199 | クエリ オプティマイザーの修正プログラム (SQL Server Cumulative Updates および Service Pack でリリースされた変更) を有効にします。 このヒントを使用して、データベース スコープ付き構成設定 QUERY_OPTIMIZER_HOTFIXES=ON をオーバーライドします。 | |
| FORCE_DEFAULT_CARDINALITY_ESTIMATION | TF 9481 | クエリ オプティマイザが現在のデータベース互換性レベルに対応するカーディナリティ推定モデルを使用するように強制します。 このヒントを使用して、データベース スコープ指定された構成設定 LEGACY_CARDINALITY_ESTIMATION=ON をオーバーライドします。 | |
| FORCE_LEGACY_CARDINALITY_ESTIMATION | TF 9481 | クエリ オプティマイザーに SQL Server 2012 (11.x) 以前のバージョンのカーディナリティ推定モデルを使用するように強制します。 このヒントを使用して、データベース スコープ指定された構成設定 LEGACY_CARDINALITY_ESTIMATION=ON をオーバーライドします。 | |
| QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n | クエリ オプティマイザーの動作をクエリ レベルで強制します。 この動作は、クエリがデータベース互換性レベル n でコンパイルされた場合と同様に発生します ( n はサポートされているデータベース互換性レベルです)。 n の現在サポートされている値の一覧については、「sys.dm_exec_valid_use_hints」を参照してください。 | SQL Server 2017 (14.x) CU10 以降 |
詳細については、「 ヒント (Transact-SQL) - クエリ」を参照してください。
追加情報
この更新プログラムは、SQL Server 2016 の Service Pack 1 に含まれています。
SQL Server 2016 のビルドについて
SQL Server 2016 の新しいビルドには、以前のビルドに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server 2016 の最新ビルドをインストールすることをお勧めします。
SQL Server クエリ オプティマイザ (QO) の動作をほのめかす必要があるシナリオは非常に一般的であり、従来は複数の (文書化されたおよび文書化されていない) トレース フラグを使用して対処されていました。 ただし、トレース フラグがグローバルに設定されている場合、他のワークロードに悪影響を及ぼす可能性があります。 さらに、既存のアプリケーションでは、セッションごとに有効にすることは実用的ではありません。OPTION QUERYTRACEON でクエリごとに有効にするには、sysadmin 固定サーバー ロールのメンバーシップが必要です。 (プラン ガイドまたはストアド プロシージャを使用してこの動作を回避できますが、管理者特権の資格情報が必要です。)
トレース フラグは、特定のサーバー特性を一時的に設定したり、特定の動作をオフにしたりするために使用されます。これらは、管理や理解が難しい場合があります。
トレース フラグの詳細については、Microsoft Developer Network (MSDN) Web サイトの「 トレース フラグ (Transact-SQL) 」トピックを参照してください。
参考資料
マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。