Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server 2022 (16.x) und höhere Versionen
von Azure SQL Database
Azure SQL Managed Instance
SQL SQL database in Microsoft Fabric
Erstellt oder aktualisiert Abfragespeicher Hinweise für einen bestimmten query_id.
Transact-SQL-Syntaxkonventionen
Syntax
sp_query_store_set_hints
[ @query_id = ] query_id ,
[ @query_hints = ] 'query_hints'
[ , [ @replica_group_id = ] 'replica_group_id' ]
[ ; ]
Arguments
Important
Argumente für erweiterte gespeicherte Prozeduren müssen in der spezifischen Reihenfolge eingegeben werden, wie im Abschnitt Syntax beschrieben. Wenn die Parameter außerhalb der Reihenfolge eingegeben werden, tritt eine Fehlermeldung auf.
[ @query_id = ] query_id
Die Abfragespeicher query_id Spalte aus sys.query_store_query.
@query_id ist groß.
[ @query_hints = ] N'query_hints'
Eine Zeichenfolge mit Abfrageoptionen beginnend mit OPTION.
@query_hints ist nvarchar(max).
Wenn USE HINT das @query_hints Argument enthalten ist, müssen die einzelnen Anführungszeichen um einzelne Hinweisnamen wiederholt werden. Beispiel: @query_hints = N'OPTION (MAXDOP = 1, USE HINTS (''ENABLE_QUERY_OPTIMIZER_HOTFIXES'',''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_150''))'.
Weitere Informationen finden Sie unter "Unterstützte Abfragehinweise".
[ @replica_group_id = ] 'replica_group_id'
Dieser optionale Parameter bestimmt den Bereich, in dem der Hinweis auf ein sekundäres Replikat angewendet wird, wenn der Abfragespeicher für lesbare Secondärdateien aktiviert ist. @replica_group_id ist groß. Der Query Store für sekundäre Replikate wird ab SQL Server 2025 (17.x) und späteren Versionen sowie in Azure SQL Database unterstützt. Für vollständige Plattformunterstützung siehe Query Store für sekundäre Replikate.
Das @replica_group_id Argument ist standardmäßig für das lokale Replikat (primär oder sekundär) festgelegt, sie können aber optional einen Wert angeben, der einem Wert in der replica_group_id Spalte in sys.query_store_replicas entspricht, um einen Hinweis für eine andere Replikatgruppe festzulegen.
Rückgabewert
0 (erfolgreich) oder 1 Fehler.
Remarks
Hinweise werden als gültige T-SQL-Zeichenfolge im Format N'OPTION (..)' angegeben.
- Wenn für einen bestimmten @query_idkeine Abfragespeicherhinweise vorhanden sind, wird ein neuer Abfragespeicherhinweis erstellt.
- Wenn bereits ein Abfragespeicherhinweis für eine bestimmte @query_id vorhanden ist, ersetzt der für @query_hints angegebene Wert die zuvor angegebenen Hinweise für die zugeordnete Abfrage.
- Wenn kein query_id vorhanden ist, wird ein Fehler ausgelöst.
In dem Fall, in dem ein Hinweis dazu führen würde, dass ein Abfrageplan erstellt wird, werden alle Hinweise ignoriert. Weitere Informationen zu Fehlerdetails finden Sie unter sys.query_store_query_hints.
Um Hinweise zu einer query_id zu entfernen, verwenden Sie die gespeicherte Systemprozedur sys.sp_query_store_clear_hints.
Unterstützte Abfragehinweise
Diese Abfragehinweise werden als Abfragespeicherhinweise unterstützt:
{ 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 ] )
Die folgenden Abfragehinweise werden derzeit nicht unterstützt:
OPTIMIZE FOR ( @var = val)MAXRECURSION-
USE PLAN(Erwägen Sie stattdessen Abfragespeicher den ursprünglichen Plan zur Erzwingung der Funktion sp_query_store_force_plan). DISABLE_DEFERRED_COMPILATION_TVDISABLE_TSQL_SCALAR_UDF_INLINING-
Tabellenhinweise (z
FORCESEEK. B. ,READUNCOMMITTED,INDEX)
Permissions
Erfordert die Berechtigung ALTER für die Datenbank.
Examples
Identifizieren einer Abfrage im Abfragespeicher
Im folgenden Beispiel werden sys.query_store_query_text und sys.query_store_query abfragen, um die query_id für ein ausgeführtes Abfragetextfragment zurückzugeben.
In diesem Beispiel befindet sich die Abfrage, die wir optimieren möchten, in der Beispieldatenbank 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;
Der Abfragespeicher gibt Abfragedaten nicht sofort an seine Systemsichten zurück.
Identifizieren Sie die Abfrage in den Abfragespeicher-Systemkatalogansichten:
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
In den folgenden Beispielen wurde das vorherige Abfragebeispiel in der SalesLT Datenbank als query_id 39 identifiziert.
Anwenden einzelner Hinweise
Im folgenden Beispiel wird der RECOMPILE Hinweis auf query_id 39 angewendet, wie im Abfragespeicher identifiziert:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(RECOMPILE)';
Im folgenden Beispiel wird der Hinweis angewendet, um die Legacy-Kardinalitätsschätzung auf query_id 39 zu erzwingen, die in Abfragespeicher identifiziert werden:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(USE HINT(''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';
Anwenden mehrerer Hinweise
Im folgenden Beispiel werden mehrere Abfragehinweise auf query_id 39 angewendet, einschließlich RECOMPILE, MAXDOP 1und das Verhalten des Abfrageoptimierrs in Kompatibilitätsebene 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''))';
Anzeigen von Abfragespeicherhinweisen
Im folgenden Beispiel werden vorhandene Abfragespeicherhinweise zurückgegeben:
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;
Entfernen eines Hinweises aus einer Abfrage
Verwenden Sie das folgende Beispiel, um den Hinweis aus query_id 39 mithilfe der gespeicherten sp_query_store_clear_hints Systemprozedur zu entfernen.
EXECUTE sys.sp_query_store_clear_hints @query_id = 39;