Bewährte Methoden für Abfragespeicherhinweise

Gilt für: SQL Server 2022 (16.x) Azure SQL-DatenbankAzure SQL Managed Instance

In diesem Artikel werden bewährte Methoden für die Verwendung von Abfragespeicherhinweisen beschrieben. Mit Abfragespeicherhinweisen können Sie Abfragepläne strukturieren, ohne den Anwendungscode ändern zu müssen.

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 eine höhere Kompatibilitätsstufe für eine Datenbank verfügbar ist, sollten Sie das Upgrade der Datenbankkompatibilitätsebene einer einzelnen Abfrage in Betracht ziehen, um die neuesten Leistungsoptimierungen und -features von SQL Server zu nutzen.

Wenn Sie beispielsweise über eine SQL Server 2022 (16.x)-Instanz mit einer Datenbank in Kompatibilitätsebene 140 verfügen, können Sie weiterhin Abfragespeicherhinweise verwenden, um einzelne Abfragen in Kompatibilitätsebene 160 auszuführen. Sie können 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 den Abfragespeicher".

Berücksichtigen einer älteren Kompatibilitätsstufe 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 Abfragespeicherhinweise, um eine vorherige Kompatibilitätsstufe für eine Abfrage anzuwenden, bis sie neu geschrieben oder anderweitig adressiert werden kann, um eine gute Leistung in der neuesten Kompatibilitätsstufe zu erreichen. Identifizieren Sie Ausreißerabfragen, die in einer höheren Kompatibilitätsebene zurückgeschritten wurden, mithilfe des Abfragespeicherberichts für zurückgerückte Abfragen, mithilfe des Abfrageoptimierungsratgebertools während einer Migration oder einer anderen Telemetrie auf Abfrageebene. Weitere Informationen zu den Unterschieden zwischen Kompatibilitätsstufen erfahren Sie unter " Unterschiede zwischen Kompatibilitätsstufen".

Nachdem Sie die neue Kompatibilitätsstufe getestet und Abfragespeicherhinweise auf diese Weise bereitgestellt haben, können Sie die Kompatibilitätsstufe der gesamten Datenbank aktualisieren und gleichzeitig wichtige problematische Abfragen auf der vorherigen Kompatibilitätsstufe beibehalten, ohne dass Codeänderungen vorgenommen werden.

Ü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 der Azure SQL-Datenbank eine Warnung (Fehlercode 12461) ausgegeben werden, die besagt, dass der RECOMPILE-Hinweis ignoriert wurde.

Informationen dazu, welche Abfragehinweise angewendet werden können, finden Sie unter Unterstützte Abfragehinweise.

Siehe auch

Nächste Schritte