KB3189813 - 更新プログラムにより、SQL Server 2016 で USE HINT クエリ ヒント引数が導入されました

適用先
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Express - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Web - duplicate (do not use)

概要

この更新プログラムにより、新しいクエリ ヒント引数 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 は、次のキーワードを含むクエリを使用して行目標の変更を使用しないプランを生成します。

  • TOP
  • オプション (FAST N)
  • IN
  • EXISTS
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) 」トピックを参照してください。

参考資料

マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。