Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:SQL Server 2022 (16.x)
База данных SQL Azure Управляемый экземпляр SQL Azure
Создает или обновляет хранилище запросов подсказки для заданного query_id.
Соглашения о синтаксисе Transact-SQL
Syntax
sp_query_store_set_hints
[ @query_id = ] query_id ,
[ @query_hints = ] 'query_hints'
[ , [ @replica_group_id = ] 'replica_group_id' ]
[ ; ]
Arguments
Important
Аргументы для расширенных хранимых процедур необходимо ввести в определенном порядке, как описано в разделе Синтаксис. Если параметры введены вне порядка, возникает сообщение об ошибке.
[ @query_id = ] query_id
Столбец хранилище запросов query_id
из sys.query_store_query.
@query_id является bigint.
[ @query_hints = ] N'query_hints'
Символьная строка параметров запроса, начиная с OPTION
.
@query_hints — nvarchar(max).
При USE HINT
включении в @query_hints
аргумент одинарные кавычки вокруг отдельных имен подсказок должны повторяться. Например: @query_hints = N'OPTION (MAXDOP = 1, USE HINTS (''ENABLE_QUERY_OPTIMIZER_HOTFIXES'',''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_150''))'
.
Дополнительные сведения см. в разделе "Поддерживаемые подсказки запросов".
[ @replica_group_id = ] 'replica_group_id'
Этот необязательный параметр определяет область применения указания на вторичной реплике при включении хранилища запросов для доступных для чтения вторичных файлов . @replica_group_id является bigint.
Аргумент @replica_group_id по умолчанию использует локальную реплику (первичную или вторичную), но при необходимости можно указать значение, соответствующее значению в replica_group_id
столбце в sys.query_store_replicas , чтобы задать указание для другой группы реплик.
Return value
0
(успешно) или 1
(сбой).
Remarks
Указания задаются в допустимом строковом формате T-SQL N'OPTION (..)'
.
- Если для определенного @query_idнет подсказок хранилища запросов, создается новое указание хранилища запросов.
- Если указание хранилища запросов уже существует для определенного @query_id, значение, указанное для @query_hints заменяет ранее указанные указания для связанного запроса.
- Если 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 ] )
Следующие указания запросов на данный момент не поддерживаются:
OPTIMIZE FOR ( @var = val)
MAXRECURSION
-
USE PLAN
(вместо этого рассмотрим первоначальный план хранилище запросов принудительного использования, sp_query_store_force_plan). DISABLE_DEFERRED_COMPILATION_TV
DISABLE_TSQL_SCALAR_UDF_INLINING
-
Табличные подсказки (например,
FORCESEEK
,READUNCOMMITTED
,INDEX
)
Permissions
Требуется разрешение ALTER
для базы данных.
Examples
Определение запроса в хранилище запросов
В следующем примере запросы sys.query_store_query_text и sys.query_store_query для возврата query_id для фрагмента текста выполненного запроса.
В этом примере запрос, который мы пытаемся настроить, находится в примере базы данных 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 AS qt
INNER JOIN sys.query_store_query AS 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
базе данных был определен как query_id 39.
Применение одного указания
В следующем примере указание применяется RECOMPILE
к query_id 39, как указано в хранилище запросов:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(RECOMPILE)';
В следующем примере применяется указание для принудительного определения кратности прежних версий query_id 39, определенных в хранилище запросов:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(USE HINT(''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';
Применение нескольких указаний
В следующем примере несколько подсказок запроса применяются к query_id 39, включая RECOMPILE
MAXDOP 1
и поведение оптимизатора запросов на уровне совместимости 110:
EXECUTE 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,
replica_group_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;
Удаление указания из запроса
Используйте следующий пример, чтобы удалить указание из query_id 39, используя системную хранимую процедуру sp_query_store_clear_hints .
EXECUTE sys.sp_query_store_clear_hints @query_id = 39;