SQL Server Query Store: Datenbank speist einen Schrank mit drei Fächern, Laufzeitkurve springt nach Planwechsel, guter Plan gesperrt

SQL Server Query Store: Langsame Abfragen finden und beheben

Der SQL Server Query Store zeichnet Abfragepläne und Laufzeitstatistiken im Zeitverlauf auf. Was er speichert, der Unterschied zum Plancache, Nutzung in sechs Schritten, wann das Erzwingen eines Plans hilft, häufige Fehler und eine Checkliste.

Kurz gesagt: Der SQL Server Query Store ist eine integrierte Funktion, die Abfragepläne und Laufzeitstatistiken einer Datenbank im zeitlichen Verlauf aufzeichnet. Läuft ein Bericht, der gestern schnell war, heute langsam, zeigt Ihnen der Query Store, welche Abfrage wann und nach welchem Planwechsel langsamer wurde, und Sie können den früheren, schnelleren Plan ohne Änderung am Anwendungscode erzwingen.

Ein Satz, den man in KMU oft hört: „Das System ist plötzlich langsam, aber niemand hat etwas geändert.“ Oft stimmt das sogar; SQL Server hat für dieselbe Abfrage einen neuen Ausführungsplan gewählt, weil Statistiken aktualisiert wurden oder sich die Datenverteilung verschoben hat. Das Problem: Ohne Aufzeichnung des vorherigen Plans wird die Ursachensuche zum Raten. Der Query Store führt diese Aufzeichnung für Sie.

Inhalt

Was ist der SQL Server Query Store und was zeichnet er auf?

Der Query Store ist eine Überwachungsfunktion ab SQL Server 2016, die pro Datenbank aktiviert wird und Abfragetexte, Ausführungspläne sowie deren Statistiken wie Dauer, CPU und Lesevorgänge in Zeitintervallen speichert.

Laut der Microsoft-Dokumentation zum Query Store liegen die Daten in drei Speichern:

  • Planspeicher: die Ausführungspläne jeder Abfrage.
  • Laufzeitstatistiken: Dauer, CPU, logische Lesevorgänge, Speicher und ähnliche Werte, zusammengefasst in festen Zeitfenstern.
  • Wartestatistiken: worauf die Abfrage gewartet hat (Sperren, Datenträger, CPU, Speicher). Diese Dimension kam mit SQL Server 2017.

Ein wichtiges Detail: In SQL Server 2016, 2017 und 2019 ist der Query Store standardmäßig ausgeschaltet. Ab SQL Server 2022 ist er für neu angelegte Datenbanken standardmäßig aktiv. Gehen Sie bei Datenbanken, die aus einer älteren Version übernommen oder aus einer Sicherung wiederhergestellt wurden, nicht davon aus, sondern prüfen Sie es.

Warum ist der Query Store nützlicher als der Plancache?

SQL Server hält Pläne ohnehin im Plancache im Arbeitsspeicher. Der Plancache speichert aber pro Abfrage nur den letzten Plan und verwirft Pläne bei Speicherdruck. Für die nachträgliche Analyse einer Verlangsamung reicht das nicht.

MerkmalPlancacheQuery Store
Gespeicherte PläneNur der letzte PlanMehrere Pläne pro Abfrage mit Verlauf
DauerhaftigkeitIm Arbeitsspeicher; weg bei Speicherdruck und NeustartIn der Datenbank gespeichert
ZeitbezugKeiner, nur MomentaufnahmeStatistiken je Zeitintervall
KorrekturmöglichkeitKeineFrüheren Plan erzwingen (Plan Forcing)
WarteinformationenServerweitPro Abfrage (ab SQL Server 2017)

SQL Server Query Store in 6 Schritten nutzen

SQL Server Query Store: Fünf-Schritte-Kreis um eine Datenbank mit Schalter: sammeln, Rückschritte finden, Pläne vergleichen, erzwingen, prüfen

1. Version und aktuellen Zustand prüfen

Fragen Sie in der Datenbank die Sicht sys.database_query_store_options ab. Weichen actual_state_desc und desired_state_desc voneinander ab, hat der Query Store selbstständig den Modus gewechselt; am häufigsten fällt er in den Nur-Lese-Modus, weil sein Speicherplatz voll ist. Für master und tempdb lässt er sich nicht aktivieren; wichtig sind die ERP- und Anwendungsdatenbanken.

2. Aktivieren und an die Arbeitslast anpassen

Aktivieren Sie ihn in SQL Server Management Studio über die Seite Query Store in den Datenbankeigenschaften oder mit: ALTER DATABASE [IhreDatenbank] SET QUERY_STORE = ON (OPERATION_MODE = READ_WRITE); Stellen Sie danach den Erfassungsmodus auf AUTO, lassen Sie die größenbasierte Bereinigung eingeschaltet und legen Sie fest, wie lange alte Daten aufbewahrt werden. Nehmen Sie die Änderung außerhalb der Geschäftszeiten vor und prüfen Sie vorher den freien Speicherplatz auf dem Server.

3. Daten sammeln lassen

Der Query Store zeichnet ab dem Einschalten auf; rückwirkend gibt es keine Daten. Für Vergleiche brauchen Sie Daten aus mindestens einem normalen Geschäftstag, einschließlich Spitzen wie Berichten zum Monatsende. Ist er schon vor einer Verlangsamung aktiv, haben Sie im Ernstfall die „Vorher“-Daten.

4. Zurückgefallene und ressourcenintensive Abfragen finden

Öffnen Sie in Management Studio den Ordner Query Store unter der Datenbank und nutzen Sie Regressed Queries (zurückgefallene Abfragen), Top Resource Consuming Queries und Query Wait Statistics. Wählen Sie Dauer, CPU oder logische Lesevorgänge als Metrik und konzentrieren Sie sich auf das Zeitfenster, in dem die Verlangsamung begann. Überwiegen Sperren als Wartekategorie, liegt das Problem eher in Blockierungen als im Plan; mehr dazu in unserem Beitrag zu SQL-Sperrproblemen.

5. Pläne vergleichen und die Ursache verstehen

Öffnen Sie zwei Pläne derselben Abfrage nebeneinander. Wechselt der neue Plan von einer Indexsuche zu einem Tabellenscan, weichen geschätzte und tatsächliche Zeilenzahlen stark ab oder erscheint eine Warnung zu einem fehlenden Index, haben Sie die Ursache meist gefunden. Zu Statistiken und Fragmentierung hilft unser Leitfaden zur SQL Server Indexwartung.

6. Bei Bedarf den guten Plan erzwingen und beobachten

Ist der frühere Plan deutlich schneller, wählen Sie ihn unter Regressed Queries aus und klicken auf Force Plan, oder Sie nutzen die Prozedur sp_query_store_force_plan. Beobachten Sie danach einige Tage die Dauer der Abfrage und prüfen Sie erzwungene Pläne regelmäßig: Nach Änderungen wie einer Schemaänderung kann das Erzwingen fehlschlagen, und SQL Server kompiliert wieder normal.

Wann ist das Erzwingen eines Plans die richtige Lösung und wann nicht?

  • Richtig: Abfrage, Daten und Schema sind gleich, aber SQL Server hat einen neuen, deutlich langsameren Plan gewählt. Das Erzwingen entlastet die Anwender schnell, während Sie eine dauerhafte Lösung vorbereiten.
  • Nicht ausreichend: Bei fehlendem Index, veralteten Statistiken oder schlecht geschriebener Abfrage verdeckt das Erzwingen nur das Symptom. Beheben Sie die Ursache und heben Sie das Erzwingen danach auf.
  • Riskant: Unterscheidet sich die Datenverteilung je Kunde oder Filiale stark, ist ein Plan für manche Parameter gut und für andere schlecht. Testen Sie vor dem Erzwingen mit verschiedenen Parametern.

Besonders wertvoll ist der Query Store bei Standard-ERP-Software wie Logo, deren Abfragetexte Sie nicht ändern können. Bei allgemeiner Langsamkeit beginnen Sie mit unserer Checkliste Logo-Datenbank langsam.

Häufige Fehler beim Einsatz des Query Store

  • Erst bei Problemen einschalten: Ohne Verlauf gibt es kein „Vorher“ zum Vergleichen.
  • Den Wechsel in den Nur-Lese-Modus übersehen: Ist der Speicher voll, stoppt die Aufzeichnung; prüfen Sie den Zustand regelmäßig.
  • Erzwungene Pläne vergessen: Monate später, nach Schema- oder Datenänderungen, kann der alte Plan zum nächsten Problem werden.
  • Prozeduren löschen und neu anlegen: DROP und CREATE unterbrechen den Verlauf der Abfrage; nutzen Sie nach Möglichkeit ALTER.
  • Nach einem Versionsupgrade nicht vergleichen: Vergleichen Sie Pläne vor und nach dem Upgrade mit dem Query Store; die Schritte beschreibt unser Leitfaden zum SQL Server Upgrade.

Fazit und Checkliste für den Query Store

  • Ist der Query Store in kritischen Datenbanken aktiv und im Lese-Schreib-Modus?
  • Steht der Erfassungsmodus auf AUTO und ist die automatische Bereinigung aktiv?
  • Werden tatsächlicher und gewünschter Zustand regelmäßig geprüft?
  • Ist Regressed Queries die erste Anlaufstelle, wenn Anwender Langsamkeit melden?
  • Gibt es eine schriftliche Liste erzwungener Pläne mit Begründung?
  • Wird das Erzwingen aufgehoben, sobald die Ursache behoben ist?

Der SQL Server Query Store macht aus der Frage „Warum ist es langsam?“ eine Frage mit belastbaren Antworten. Wir von ÇAP Teknoloji aktivieren den Query Store mit passenden Einstellungen in Ihren Datenbanken, analysieren langsame Abfragen gemeinsam mit Ihnen und setzen dauerhafte Lösungen im Rahmen unserer SQL-Beratung um; erreichen Sie uns über unsere Kontaktseite.

Häufig gestellte Fragen

In welchen SQL Server Versionen gibt es den Query Store?

Den Query Store gibt es ab SQL Server 2016. In SQL Server 2016, 2017 und 2019 ist er standardmäßig ausgeschaltet; ab SQL Server 2022 ist er für neu angelegte Datenbanken standardmäßig aktiv. Prüfen Sie bestehende Datenbanken mit der Sicht sys.database_query_store_options.

Macht der Query Store den Server langsamer?

Da er laufend aufzeichnet, verursacht der Query Store etwas Zusatzlast und belegt Speicherplatz. Halten Sie das im Rahmen, indem Sie den Erfassungsmodus auf AUTO stellen, die größenbasierte Bereinigung aktiv lassen und aktuelle kumulative Updates installieren. Aktivieren Sie ihn zuerst zu einer ruhigen Zeit und beobachten Sie den Server.

Ist das Erzwingen eines Plans eine dauerhafte Lösung?

Meistens nicht. Es entlastet die Anwender schnell, wenn SQL Server einen neuen, langsameren Plan gewählt hat. Ursachen wie ein fehlender Index oder veraltete Statistiken müssen trotzdem behoben und erzwungene Pläne regelmäßig geprüft werden.

Warum wechselt der Query Store in den Nur-Lese-Modus?

Der häufigste Grund ist, dass der für den Query Store reservierte Speicher voll ist und keine neuen Daten mehr aufgezeichnet werden. Erhöhen Sie die maximale Größe oder bereinigen Sie alte Daten und stellen Sie dann wieder auf Lesen und Schreiben. Wer tatsächlichen und gewünschten Zustand regelmäßig prüft, erkennt das früh.

ÇAP Teknoloji, T.C. Sanayi ve Teknoloji Bakanlığı Teknogirişim Rozeti belgesi