Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2022 (16.x)
Azure SQL Database
Azure SQL Managed Instance
Tworzy lub aktualizuje wskazówki dotyczące magazynu zapytań dla danego query_id.
Transact-SQL konwencje składni
Składnia
sp_query_store_set_hints
[ @query_id = ] query_id ,
[ @query_hints = ] 'query_hints'
[ , [ @query_hint_scope = ] 'replica_group_id' ]
[ ; ]
Argumenty
Ważne
Argumenty dla rozszerzonych procedur składowanych należy wprowadzić w określonej kolejności zgodnie z opisem w sekcji składni. Jeśli parametry są wprowadzane poza kolejnością, wystąpi komunikat o błędzie.
[ @query_id = ] query_id
Kolumna magazynu zapytań query_id
z sys.query_store_query.
@query_id jest bigint.
[ @query_hints = ] N'query_hints'
Ciąg znaków opcji zapytania rozpoczynający się od OPTION
.
@query_hints to nvarchar(max). Aby uzyskać więcej informacji, zobacz Obsługiwane wskazówki dotyczące zapytań w tym artykule.
[ @query_hint_scope = ] 'replica_group_id'
Domyślnie zakres nowej wskazówki magazynu zapytań jest tylko repliką lokalną. @query_hint_scope jest tinyint. Ten opcjonalny parametr określa zakres, w którym wskazówka zostanie zastosowana w repliki pomocniczej po włączeniu magazynu zapytań dla replik pomocniczych. Opcjonalny argument query_hint_scope jest domyślny tylko dla repliki lokalnej (podstawowej lub pomocniczej), ale opcjonalnie można określić replica_group_id odwołującą się do sys.query_store_replicas.
Wartość zwracana
0
(powodzenie) lub 1
(niepowodzenie).
Uwagi
Wskazówki są określone w prawidłowym formacie ciągu języka T-SQL N'OPTION (..)'
.
- Jeśli dla określonego @query_idnie istnieją żadne wskazówki dotyczące magazynu zapytań, zostanie utworzona nowa wskazówka magazynu zapytań.
- Jeśli wskazówka magazynu zapytań już istnieje dla określonego @query_id, wartość określona dla @query_hints zastępuje wcześniej określone wskazówki dla skojarzonego zapytania.
- Jeśli query_id nie istnieje, zostanie zgłoszony błąd.
W przypadku, gdy jedna z wskazówek uniemożliwiłaby utworzenie planu zapytania, wszystkie wskazówki są ignorowane. Aby uzyskać więcej informacji o błędach, zobacz sys.query_store_query_hints.
Aby usunąć wskazówki skojarzone z query_id, użyj systemowej procedury składowanej sys.sp_query_store_clear_hints.
Obsługiwane wskazówki dotyczące zapytań
Te wskazówki dotyczące zapytań są obsługiwane jako wskazówki dotyczące magazynu zapytań:
{ 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 ] )
Następujące wskazówki dotyczące zapytań są obecnie nieobsługiwane:
OPTIMIZE FOR ( @var = val)
MAXRECURSION
-
USE PLAN
(zamiast tego należy rozważyć, że oryginalny plan magazynu zapytań wymusza możliwości, sp_query_store_force_plan). DISABLE_DEFERRED_COMPILATION_TV
DISABLE_TSQL_SCALAR_UDF_INLINING
- wskazówki dotyczące tabeli (na przykład FORCESEEK, READUNCOMMITTED, INDEX)
Uprawnienia
Wymaga uprawnienia ALTER w bazie danych.
Przykłady
Identyfikowanie zapytania w magazynie zapytań
Poniższe przykładowe zapytania sys.query_store_query_text i sys.query_store_query, aby zwrócić query_id dla wykonanego fragmentu tekstu zapytania.
W tym przykładzie zapytanie, które próbujemy dostroić, znajduje się w przykładowej bazie danych 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;
Magazyn zapytań nie odzwierciedla natychmiast danych zapytania w widokach systemowych.
Zidentyfikuj zapytanie w widokach wykazu systemu magazynu zapytań:
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
W poniższych przykładach poprzedni przykład zapytania w bazie danych SalesLT
został zidentyfikowany jako query_id 39.
Stosowanie pojedynczej wskazówki
Poniższy przykład stosuje wskazówkę RECOMPILE do query_id 39, jak określono w magazynie zapytań:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(RECOMPILE)';
Poniższy przykład stosuje wskazówkę, aby wymusić starszego narzędzia do szacowania kardynalności do query_id 39 zidentyfikowanych w magazynie zapytań:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';
Stosowanie wielu wskazówek
Poniższy przykład stosuje wiele wskazówek dotyczących zapytań do query_id 39, w tym RECOMPILE, MAXDOP 1 i zachowanie optymalizatora zapytań SQL 2012:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(RECOMPILE, MAXDOP 1, USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_110''))';
Wyświetlanie wskazówek dotyczących magazynu zapytań
Poniższy przykład zwraca istniejące wskazówki dotyczące magazynu zapytań:
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;
Usuwanie wskazówki z zapytania
Użyj poniższego przykładu, aby usunąć wskazówkę z query_id 39 przy użyciu procedury składowanej systemu sp_query_store_clear_hints.
EXEC sys.sp_query_store_clear_hints @query_id = 39;
Powiązana zawartość
- wskazówki dotyczące magazynu zapytań
- wskazówki dotyczące tabel (Transact-SQL)
- sp_query_store_clear_hints (Transact-SQL)
- sys.query_store_query_hints (Transact-SQL)
- Monitorowanie wydajności przy użyciu magazynu zapytań