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
Azure SQL Database
Azure SQL Managed Instance
SQL-Datenbank in Microsoft Fabric
In diesem Artikel werden bewährte Methoden für die Verwendung von Abfragespeicherhinweisen erläutert. Mit Abfragespeicher-Hinweisen können Sie die Formen von Abfrageplänen gestalten, ohne den Anwendungscode ändern zu müssen.
- Weitere Informationen zum Konfigurieren und Verwalten mit dem Abfragespeicher finden Sie unter Überwachen der Leistung mithilfe des Abfragespeichers.
- Informationen zum Ermitteln umsetzbarer Informationen und Optimieren der Leistung mit dem Abfragespeicher finden Sie unter Optimieren der Leistung mit dem Abfragespeicher.
- Allgemeine bewährte Methoden im Abfragespeicher finden Sie unter Bewährte Methoden für die Überwachung von Workloads mit dem Abfragespeicher.
Anwendungsfälle für Abfragespeicherhinweise
Betrachten Sie die folgenden Anwendungsfälle als ideal für Abfragespeicherhinweise. Weitere Informationen finden Sie unter Wann sollten Abfragespeicherhinweise verwendet werden?.
Caution
Da der SQL Server-Abfrageoptimierer in der Regel den besten Ausführungsplan für eine Abfrage auswählt, wird empfohlen, dass nur erfahrene Entwickler und Datenbankadministratoren Hinweise verwenden, wenn alle anderen Möglichkeiten sich als unbefriedigend erwiesen haben. Weitere Informationen finden Sie unter Abfragehinweise.
Wenn Code nicht geändert werden kann
Mit Abfragespeicherhinweisen können Sie die Ausführungspläne von Abfragen beeinflussen, ohne den Anwendungscode oder Datenbankobjekte ändern zu müssen. Mit keinem anderen Feature können Sie Abfragehinweise schnell und einfach anwenden.
Sie können Abfragespeicherhinweise verwenden, z. B. zur Optimierung von ETL-Workloads (Extract-Transform-Load), ohne den Code neu bereitstellen zu müssen. In diesem 14-minütigen Video erfahren Sie, wie Sie das Massendatenladen mit Query Store-Hinweisen verbessern:
Abfragespeicherhinweise sind einfache Abfrageoptimierungsmethoden, aber wenn eine Abfrage problematisch wird, sollte sie mit weiter gehenden Codeänderungen behoben werden. Wenn Sie regelmäßig Abfragespeicherhinweise auf eine Abfrage anwenden müssen, sollten Sie in Betracht ziehen, sie in größerem Umfang neu zu schreiben. Der SQL Server-Abfrageoptimierer wählt in der Regel den besten Ausführungsplan für eine Abfrage aus. Es wird empfohlen, nur Hinweise als letztes Mittel für erfahrene Entwickler und Datenbankadministratoren zu verwenden.
Informationen dazu, welche Abfragehinweise angewendet werden können, finden Sie unter Unterstützte Abfragehinweise.
Unter hoher Transaktionslast oder mit unternehmenskritischem Code
Wenn Codeänderungen aufgrund hoher Anforderungen an die Betriebszeit oder der Transaktionslast nicht praktikabel sind, können Query Store-Hinweise schnell Abfragehinweise auf vorhandene Abfrageworkloads anwenden. Das Hinzufügen und Entfernen von Query Store-Hinweisen ist einfach.
Abfragespeicherhinweise können in Abfragebatches hinzugefügt und entfernt werden, um die Leistung für Zeitfenster anzupassen, die für Bursts mit außergewöhnlicher Workload vorgesehen sind.
Als Ersatz für Plananleitungen
Vor Abfragespeicherhinweisen waren Fachkräften in der Entwicklung für ähnliche Aufgaben auf Planhinweislisten angewiesen, deren Verwendung komplex sein kann. Abfragespeicherhinweise sind mit Abfragespeicherfeatures von SQL Server Management Studio (SSMS) integriert, um Abfragen visuell zu durchsuchen.
Bei Planhinweislisten ist das Durchsuchen aller Pläne mit Abfrageausschnitten erforderlich. Das Feature Abfragespeicherhinweise erfordert keine genau übereinstimmenden Abfragen, um sich auf den resultierenden Abfrageplan auszuwirken. Abfragespeicherhinweise können auf eine query_id im Abfragespeicher-Dataset angewendet werden.
Abfragespeicherhinweise überschreiben hartcodierte Hinweise auf Anweisungsebene sowie vorhandene Planhinweislisten.
Erwägen Sie einen neueren Kompatibilitätsgrad
Abfragespeicherhinweise können eine wertvolle Methode sein, wenn ein neuerer Datenbank-Kompatibilitätsgrad aufgrund von Herstellerspezifikationen oder größeren Testverzögerungen nicht verfügbar ist. Wenn ein höherer Kompatibilitätsgrad für eine Datenbank verfügbar ist, sollten Sie ein Upgrade des Datenbank-Kompatibilitätsgrads einer einzelnen Abfrage durchführen, um die neuesten Leistungsoptimierungen und Features von SQL Server zu nutzen.
Wenn Sie beispielsweise über eine SQL Server 2022 (16.x) Instance mit einer Datenbank in Kompatibilitätsebene 140 verfügen, können Sie weiterhin Abfragespeicher-Hinweise verwenden, um einzelne Abfragen in Kompatibilitätsebene 160 auszuführen. Sie können dazu den folgenden Hinweis verwenden:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_160''))';
Für ein vollständiges Tutorial siehe Beispiele für Query Store-Hinweise.
Berücksichtigen einer älteren Kompatibilitätsebene nach dem Upgrade
Ein weiterer Fall, bei dem Abfragespeicherhinweise helfen können, ist, dass Abfragen nach einer SQL Server-Instanzmigration oder einem Upgrade nicht direkt geändert werden können. Verwenden Sie Abfragespeicher-Hinweise, um eine vorherige Kompatibilitätsebene für eine Abfrage anzuwenden, bis sie neu geschrieben oder anderweitig adressiert werden kann, um eine gute Leistung in der neuesten Kompatibilitätsebene zu erreichen. Identifizieren Sie zurückgestellte Ausreißerabfragen mit einer höheren Kompatibilitätsebene mithilfe des Abfragespeicherberichts zu zurückgestellten Abfragen, mit dem Abfrageoptimierungs-Assistent (während einer Migration) oder mit anderen Telemetriedaten auf Abfrageebene. Weitere Informationen zu den Unterschieden zwischen Kompatibilitätsebenen finden Sie unter Unterschiede zwischen Kompatibilitätsebenen.
Nachdem Sie den Leistungstest bei der neuen Kompatibilitätsebene durchgeführt und Abfragespeicher-Hinweise auf diese Weise bereitgestellt haben, können Sie die Kompatibilitätsebene der gesamten Datenbank aktualisieren und gleichzeitig wichtige problematische Abfragen auf der vorherigen Kompatibilitätsebene beibehalten, ohne dass Codeänderungen vorgenommen werden müssen.
Blockieren der zukünftigen Ausführung problematischer Abfragen
Sie können den ABORT_QUERY_EXECUTION Abfragehinweis verwenden, um die zukünftige Ausführung bekannter problematischer Abfragen zu blockieren, z. B. nicht benötigte Abfragen, die einen hohen Ressourcenverbrauch verursachen und kritische Anwendungsworkloads beeinflussen.
Note
Der ABORT_QUERY_EXECUTION Abfragehinweis ist nur in Azure SQL-Datenbank, azure SQL Managed InstanceAUTD und SQL Server 2025 (17.x) verfügbar.
Um beispielsweise die zukünftige Ausführung von query_id 39 zu blockieren, führen Sie sys.sp_query_store_set_hints wie folgt aus:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION (USE HINT (''ABORT_QUERY_EXECUTION''))';
Führen Sie sys.sp_query_store_clear_hints aus, um die Blockierung derselben Abfrage aufzuheben:
EXECUTE sys.sp_query_store_clear_hints @query_id = 39;
Weitere Informationen finden Sie unter Beispiele für Abfragespeicherhinweise.
Es gelten die folgenden Bedingungen:
Wenn Sie diesen Hinweis für eine Abfrage angeben, schlägt ein Versuch zum Ausführen der Abfrage mit Fehler 8778, Schweregrad 16, Abfrageausführung wurde abgebrochen, da der ABORT_QUERY_EXECUTION-Hinweis angegeben wurde, fehl.
Um die Blockierung einer Abfrage aufzuheben, können Sie den Hinweis löschen, indem Sie den
query_idWert an den@query_idParameter in der sys.sp_query_store_clear_hints gespeicherten Prozedur übergeben.- Diese gespeicherte Prozedur löscht alle Hinweise für eine Abfrage. Wenn Sie vorhandene Hinweise beibehalten möchten, während Sie die Blockierung der Abfrage aufheben, verwenden Sie sys.sp_query_store_set_hints, entfernen Sie den
ABORT_QUERY_EXECUTIONHinweis, aber behalten Sie andere Hinweise bei.
- Diese gespeicherte Prozedur löscht alle Hinweise für eine Abfrage. Wenn Sie vorhandene Hinweise beibehalten möchten, während Sie die Blockierung der Abfrage aufheben, verwenden Sie sys.sp_query_store_set_hints, entfernen Sie den
Sie können Systemansichten verwenden, um Abfragen im Abfragespeicher zu finden, die blockiert sind, wie in der folgenden Beispielabfrage:
SELECT qsh.query_id, q.query_hash, qt.query_sql_text FROM sys.query_store_query_hints AS qsh INNER JOIN sys.query_store_query AS q ON qsh.query_id = q.query_id INNER JOIN sys.query_store_query_text AS qt ON q.query_text_id = qt.query_text_id WHERE UPPER(qsh.query_hint_text) LIKE '%ABORT[_]QUERY[_]EXECUTION%';Um den
query_idWert abzurufen, muss mindestens eine Abfrageausführung im Abfragespeicher aufgezeichnet werden. Diese Ausführung muss nicht erfolgreich sein. Dies bedeutet, dass die zukünftige Ausführung von abgelaufenen oder abgebrochenen Abfragen blockiert werden kann.Wenn Sie alle Abfragen mit einem bestimmten Abfragehash blockieren oder aufheben müssen, sollten Sie ein Automatisierungsskript verwenden. Beispielsweise ist dbo.sp_query_store_modify_hints_by_query_hash ein Beispiel für eine gespeicherte Prozedur, die entweder die
sys.sp_query_store_set_hintsoder diesys.sp_query_store_clear_hintsgespeicherte Systemprozedur in einer Schleife für allequery_id-Werte aufruft, die einem Abfragehash entsprechen.Wenn eine Abfrage bereits ausgeführt wird, wenn Sie sie blockieren, wird die Ausführung fortgesetzt. Sie können die KILL-Anweisung verwenden, um die Abfrage abzubrechen.
- Die Ausführung von abgebrochenen Abfragen wird nicht im Abfragespeicher aufgezeichnet. Wenn sich die Abfrage noch nicht im Abfragespeicher befindet, müssen Sie zulassen, dass die Abfrage abgeschlossen oder abgelaufen ist, um eine
query_idabzurufen, die Sie blockieren können.
- Die Ausführung von abgebrochenen Abfragen wird nicht im Abfragespeicher aufgezeichnet. Wenn sich die Abfrage noch nicht im Abfragespeicher befindet, müssen Sie zulassen, dass die Abfrage abgeschlossen oder abgelaufen ist, um eine
Wenn eine Abfrage durch den Hinweis
ABORT_QUERY_EXECUTIONblockiert wird, werden die Spaltenexecution_typeundexecution_type_descin der Ansicht sys.query_store_runtime_stats jeweils auf 4 und Ausnahme festgelegt.Wie bei allen Abfragespeicher-Hinweisen müssen Sie über die
ALTER-Berechtigung für die Datenbank verfügen, um den HinweisABORT_QUERY_EXECUTIONfestzulegen oder zu löschen.
Überlegungen zu Abfragespeicherhinweisen
Berücksichtigen Sie die folgenden Szenarien beim Verwenden von Abfragespeicherhinweisen.
Änderungen bei der Datenverteilung
Planhinweislisten, erzwungene Pläne über den Abfragespeicher und Abfragespeicherhinweise überschreiben die Entscheidungsfindung des Optimierers. Der Abfragespeicherhinweis kann jetzt vorteilhaft sein, wird es künftig aber nicht mehr sein. Wenn ein Abfragespeicherhinweis beispielsweise bei einer Abfrage in früheren Datenverteilungen hilft, kann es kontraproduktiv sein, wenn dmL-Vorgänge im großen Maßstab die Daten ändern. Eine neue Datenverteilung kann dazu führen, dass der Optimierer eine bessere Entscheidung als der Hinweis treffen kann. Dieses Szenario ist die häufigste Folge des Erzwingens des Planverhaltens.
Überprüfen Sie regelmäßig Ihre Query Store-Hinweisstrategie.
Bewerten Sie Ihre vorhandene Strategie zu Abfragespeicherhinweisen in den folgenden Fällen neu:
- Nach bekannten großen Änderungen bei der Datenverteilung.
- Wenn sich die für die Datenbank verfügbaren Ressourcen ändern. Beispiel: Wenn sich die Berechnungsgröße Ihrer Azure SQL-Datenbank, sql Managed Instance oder des virtuellen SQL Server-Computers ändert.
- Wo Plankorrekturen schon länger notwendig sind. Abfragespeicherhinweise werden am besten für kurzfristige Korrekturen verwendet.
- Unerwartete Leistungsregressionen.
Potenzial für umfangreiche Auswirkungen
Hinweise zum Abfragespeicher wirken sich unabhängig von Parametersatz, Quellanwendung, Benutzer oder Resultset auf alle Ausführungen der Abfrage aus. Bei versehentlicher Leistungsregression können Abfragespeicherhinweise, die mit sys.sp_query_store_set_hints erstellt wurden, problemlos mit sys.sp_query_store_clear_hints entfernt werden.
Führen Sie für unternehmenskritische oder vertrauliche Systeme mit entsprechender Sorgfalt Auslastungstests durch, bevor Sie Abfragespeicherhinweise in der Produktion anwenden.
Erzwungene Parametrisierung und der RECOMPILE-Hinweis werden nicht unterstützt
Das Anwenden des RECOMPILE Abfragehinweiss mit Abfragespeicherhinweisen wird nicht unterstützt, wenn die Parameterisierung der Datenbankoption auf FORCED festgelegt ist. Weitere Informationen finden Sie unter Richtlinien für die Verwendung der erzwungenen Parametrisierung.
Der RECOMPILE Hinweis ist nicht mit erzwungener Parameterisierung kompatibel, die auf Datenbankebene festgelegt ist. Wenn die Datenbank die erzwungene Parameterisierung verwendet und der RECOMPILE Hinweis Teil der hinweists-Zeichenfolge ist, die im Abfragespeicher für eine Abfrage festgelegt ist, ignoriert das Datenbankmodul den RECOMPILE Hinweis und wendet andere Hinweise an, wenn angegeben. Darüber hinaus wird ab Juli 2022 in der Azure SQL-Datenbank eine Warnung (Fehlercode 12461) ausgegeben, die besagt, dass der RECOMPILE Hinweis ignoriert wurde.
Informationen dazu, welche Abfragehinweise angewendet werden können, finden Sie unter Unterstützte Abfragehinweise.