sp_query_store_set_hints (Transact-SQL)

適用対象:YesAzure SQL Database YesAzure SQL Managed Instance

特定query_idヒントクエリ ストア作成または更新します。

Topic link iconTransact-SQL 構文表記規則

構文

sp_query_store_set_hints
    @query_id bigint,
    @query_hints nvarchar(max) [;]  

戻り値

0 (成功) または 1 (失敗)

解説

ヒントは、有効な T-SQL 文字列形式N'OPTION (..)'で指定されます。

  • 特定query_idのクエリ ストア ヒントが存在しない場合は、新しいクエリ ストア ヒントが作成されます。
  • 特定query_idのクエリ ストア ヒントが既に存在する場合、指定された最後の値は、関連付けられたクエリに対して以前に指定した値をオーバーライドします。
  • query_id存在しない場合は、エラーが発生します。

ヒントが原因でクエリが失敗する場合、ヒントは無視され、最新のエラーの詳細は sys.query_store_query_hints で表示できます。

に関連付けられているヒントを query_id削除するには、システム ストアド プロシージャ sys.sp_query_store_clear_hintsを使用します。

サポートされているクエリ ヒント

これらのクエリ ヒントは、クエリ ストア ヒントとしてサポートされています。

{ HASH | ORDER } GROUP   
  | { CONCAT | HASH | MERGE } UNION   
  | { LOOP | MERGE | HASH } JOIN   
  | EXPAND VIEWS   
  | FAST number_rows   
  | FORCE ORDER   
  | IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX  
  | KEEP PLAN   
  | KEEPFIXED PLAN  
  | MAX_GRANT_PERCENT = percent  
  | MIN_GRANT_PERCENT = percent  
  | MAXDOP number_of_processors   
  | NO_PERFORMANCE_SPOOL   
  | OPTIMIZE FOR UNKNOWN  
  | PARAMETERIZATION { SIMPLE | FORCED }   
  | RECOMPILE  
  | ROBUST PLAN   
  | USE HINT   ( '<hint_name>' [ , ...n ] )

次のクエリ ヒントは現在サポートされていません。

アクセス許可

データベースに対する ALTER 権限が必要です。

クエリ ストアでクエリを識別する

次のクエリの例では、実行されたクエリ テキスト フラグメントを返query_idsys.query_store_query_textとsys.query_store_queryします。

この例では、チューニングしようとしているクエリがサンプル データベースに SalesLT 含まれています。

SELECT * FROM SalesLT.Address as A 
INNER JOIN SalesLT.CustomerAddress as CA
on A.AddressID = CA.AddressID
WHERE PostalCode = '98052' ORDER BY A.ModifiedDate DESC;

クエリ ストアでは、クエリ データがシステム ビューにすぐに反映されるわけではありません。

クエリ ストア システム カタログ ビューでクエリを識別します。

SELECT q.query_id, qt.query_sql_text
FROM sys.query_store_query_text qt 
INNER JOIN sys.query_store_query q ON 
    qt.query_text_id = q.query_text_id 
WHERE query_sql_text like N'%PostalCode =%'  
  AND query_sql_text not like N'%query_store%';
GO

次のサンプルでは、データベース内の前の SalesLT クエリの例は 39 と query_id 識別されました。

単一のヒントを適用する

次の例では、クエリ ストアで示されているように、RECOMPILE ヒントquery_idを 39 に適用します。

EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(RECOMPILE)';

次の例では、ヒントを適用して、クエリ ストアで識別されたレガシ カーディナリティ推定器query_id強制的に 39 に設定します。

EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';

複数のヒントを適用する

次の例では、RECOMPILE、MAXDOP 1、SQL 2012 クエリ オプティマイザーの動作など、複数のクエリ ヒントquery_idを 39 に適用します。

EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(RECOMPILE, MAXDOP 1, USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_110''))';

クエリ ストアヒントを表示する

次の例では、既存のクエリ ストア ヒントが返されます。

SELECT query_hint_id, query_id, query_hint_text, last_query_hint_failure_reason, last_query_hint_failure_reason_desc, query_hint_failure_count, source, source_desc 
FROM sys.query_store_query_hints 
WHERE query_id = 39;

クエリからヒントを削除する

sp_query_store_clear_hints (Transact-SQL) システム ストアド プロシージャを使用して、39 からquery_idヒントを削除するには、次の例を使用します。

EXEC sys.sp_query_store_clear_hints @query_id = 39;

参照