Bewährte Methoden für Abfragespeicherhinweise
Gilt für: SQL Server 2022 (16.x) Azure SQL-Datenbank Azure SQL Managed Instance
In diesem Artikel werden bewährte Methoden für die Verwendung von Abfragespeicherhinweisen erläutert. Mit Abfragespeicherhinweisen können Sie Abfragepläne strukturieren, ohne den Anwendungscode ändern zu müssen.
- Weitere Informationen zum Konfigurieren und Verwalten mit dem Abfragespeicher finden Sie unter Überwachen der Leistung mit dem Abfragespeicher.
- Informationen zur Ermittelung handlungsrelevanter Informationen und zur Leistungsoptimierung mit dem Abfragespeicher finden Sie unter Optimieren der Leistung 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?.
Achtung
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 z. B. Abfragespeicherhinweise verwenden, um ETLs zu nutzen, ohne Code erneut bereitzustellen. In diesem 14-minütigen Video erfahren Sie, wie Sie das Massenladen mit Abfragespeicherhinweisen 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, und es wird empfohlen, dass nur erfahrene Entwickler und Datenbankadministratoren Hinweise verwenden, wenn alle anderen Möglichkeiten sich als unbefriedigend erwiesen haben.
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 Uptime-Anforderungen oder Transaktionslast nicht praktikabel sind, können Abfragespeicherhinweise Abfragehinweise schnell auf vorhandene Abfrageworkloads anwenden. Das Hinzufügen und Entfernen von Abfragespeicherhinweisen 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 Planhinweislisten
Vor Abfragespeicherhinweisen waren Entwickler 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:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_160''))';
Ein vollständiges Lernprogramm finden Sie unter Beispiele für Abfragespeicher-Hinweise.
Berücksichtigen einer älteren Kompatibilitätsebene nach dem Upgrade
Ein weiterer Fall, in dem Abfragespeicher-Hinweise helfen können, ist, dass Abfragen nach einer Migration der SQL Server-Instanz 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 Ausreißerabfragen, die sich auf eine höhere Kompatibilitätsebene zurückentwickelt haben, indem Sie den Bericht über zurückentwickelte Abfragen des Abfragespeichers, das Tool Berater für Abfrageoptimierung während einer Migration oder andere Anwendungstelemetrie auf Abfrageebene verwenden. 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.
Überlegungen zu Abfragespeicherhinweisen
Berücksichtigen Sie die folgenden Szenarios beim Bereitstellen 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, aber nicht in der Zukunft. Wenn z. B. ein Abfragespeicherhinweis eine Abfrage in einer früheren Datenverteilung unterstützt, kann er 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 treffen kann als mit dem Hinweis. Dieses Szenario ist die häufigste Folge des Erzwingens des Planverhaltens.
Regelmäßig Ihre Strategie zu Abfragespeicherhinweisen neu bewerten
Bewerten Sie Ihre vorhandene Strategie zu Abfragespeicherhinweisen in den folgenden Fällen neu:
- Nach bekannten großen Änderungen bei der Datenverteilung.
- Wenn das Servicelevelziel (Service Level Objective, SLO) Ihrer Azure SQL-Datenbank oder verwalteten Instanz oder VM geändert wurde.
- Wo Plankorrekturen schon länger notwendig sind. Abfragespeicherhinweise werden am besten für kurzfristige Korrekturen verwendet.
- Unerwartete Leistungsregressionen.
Potenzial für umfangreiche Auswirkungen
Abfragespeicherhinweise wirken sich auf alle Ausführungen der Abfrage aus, unabhängig von Parametern, Quellanwendung, Benutzer oder Resultset. 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 sensible 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-Abfragehinweises mit Abfragespeicherhinweisen wird nicht unterstützt, wenn die Datenbankoption PARAMETERIZATION auf FORCED festgelegt ist. Weitere Informationen finden Sie unter Richtlinien für die Verwendung der erzwungenen Parametrisierung.
Der RECOMPILE-Hinweis ist nicht kompatibel mit erzwungener Parametrisierung, die auf Datenbankebene festgelegt ist. Wenn für die Datenbank die erzwungene Parametrisierung festgelegt wurde und der RECOMPILE-Hinweis Teil der in Abfragespeicher für eine Abfrage festgelegten Hinweiszeichenfolgen ist, ignoriert die Datenbank-Engine den RECOMPILE-Hinweis und wendet andere Hinweise an, wenn sie genutzt werden. Darüber hinaus sollte ab Juli 2022 in Azure SQL-Datenbank eine Warnung (Fehlercode 12461) ausgegeben werden, die besagt, dass der ERNEUT KOMPILIEREN-Hinweis ignoriert wurde.
Informationen dazu, welche Abfragehinweise angewendet werden können, finden Sie unter Unterstützte Abfragehinweise.
Weitere Informationen
- Abfragespeicherhinweise
- sys.query_store_query_hints (Transact-SQL)
- sys.sp_query_store_set_hints (Transact-SQL)
- sys.sp_query_store_clear_hints (Transact-SQL)
- Speichern eines Ausführungsplans im XML-Format
- Anzeigen und Speichern von Ausführungsplänen
- Hinweise (Transact-SQL) – Abfrage