Erfassen von Daten im Abfragespeicher
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics SQL-Datenbank in Microsoft Fabric
Die Funktionsweise des SQL Server-Abfragespeichers ähnelt der von Flugdatenschreibern. Kompilierungs- und Laufzeitinformationen zu Abfragen und Plänen werden durchgehend erfasst. Daten, die sich auf Abfragen beziehen, werden in internen Tabellen gespeichert und Benutzern in mehreren Sichten angezeigt.
Ansichten
Das folgende Diagramm zeigt Abfragespeichersichten und ihre logischen Beziehungen, wobei Kompilierzeitinformationen als blaue Entitäten dargestellt werden:
Sichtbeschreibungen
Sicht | Beschreibung |
---|---|
sys.query_store_query_text | Stellt eindeutige Abfragetexte dar, die in der Datenbank ausgeführt wurden. Kommentare und Leerzeichen vor und nach dem Abfragetext werden ignoriert. Kommentare und Leerzeichen im Text werden nicht ignoriert. Jede Anweisung im Batch generiert einen separaten Abfragetexteintrag. |
sys.query_context_settings | Stellt eindeutige Kombinationen von Einstellungen dar, die sich auf Pläne auswirken, mit denen Abfragen ausgeführt werden. Derselbe Abfragetext, der mit unterschiedlichen Einstellungen zur Planauswirkung ausgeführt wurde, erzeugt separate Abfrageeinträge im Abfragespeicher, da context_settings_id Teil des Abfrageschlüssels ist. |
sys.query_store_query | Abfrageeinträge, die im Abfragespeicher separat nachverfolgt und erzwungen werden. Ein einzelner Abfragetext kann mehrere Abfrageeinträge generieren, wenn er unter unterschiedlichen Kontexteinstellungen bzw. außerhalb oder innerhalb verschiedener Transact-SQL-Module (z. B. gespeicherte Prozeduren und Trigger) ausgeführt wird. |
sys.query_store_plan | Stellt den geschätzten Plan für die Abfrage mit den Kompilierzeitstatistiken dar. Der gespeicherte Plan entspricht einem Plan, den Sie durch die Verwendung von SET SHOWPLAN_XML ON erhalten würden. |
sys.query_store_runtime_stats_interval | Der Abfragespeicher trennt die Zeit in automatisch generierte Zeitfenster (Intervalle) und speichert aggregierte Statistiken für jeden ausgeführten Plan auf diesem Intervall. Die Größe des Intervalls wird gesteuert durch die Konfigurationsoption Intervall für Statistikerfassung (in Management Studio) oder INTERVAL_LENGTH_MINUTES mithilfe von ALTER DATABASE SET Options (Transact-SQL). |
sys.query_store_runtime_stats | Aggregierte Laufzeitstatistiken für ausgeführte Pläne. Alle erfassten Metriken werden in Form von 4 Statistikfunktionen ausgedrückt: Mittelwert, Minimum, Maximum und Standardabweichung. |
Weitere Informationen zu Abfragespeichersichten finden Sie im Abschnitt „Zugehörige Sichten, Funktionen und Prozeduren“ in Leistungsüberwachung mit dem Abfragespeicher.
Abfrageverarbeitung
Der Abfragespeicher interagiert an den folgenden wichtigen Punkten mit der Abfrageverarbeitungspipeline:
Wenn eine Abfrage zum ersten Mal kompiliert wird, werden der Abfragetext und der ursprüngliche Plan an den Abfragespeicher gesendet.
Wenn eine Abfrage neu kompiliert wird, wird der Plan im Abfragespeicher aktualisiert. Wenn ein neuer Plan erstellt wird, fügt der Abfragespeicher den neuen Planeintrag für die Abfrage ein und behält die vorherigen Pläne zusammen mit deren Ausführungsstatistiken bei.
Bei der Abfrageausführung werden Laufzeitstatistiken an den Abfragespeicher gesendet. Der Abfragespeicher sorgt für genaue aggregierte Statistiken für jeden Plan, der innerhalb des aktuell aktiven Intervalls ausgeführt wurde.
Während der Kompilierung und Prüfung für Neukompilierungsphasen ermittelt SQL Server, ob sich im Abfragespeicher ein Plan befindet, der auf die aktuell ausgeführte Abfrage angewendet werden sollte. Wenn ein erzwungener Plan vorliegt, und der Plan im Prozedurcache sich vom erzwungenen Plan unterscheidet, wird die Abfrage neu kompiliert. Dies entspricht der gleichen Vorgehensweise, die angewendet wird, wenn PLAN HINT auf die Abfrage angewendet wurde. Dieser Vorgang erfolgt transparent in der Benutzeranwendung.
Im folgenden Diagramm werden die Integrationspunkte aus den vorherigen Schritten dargestellt:
Hinweise
Zur Minimierung des E/A-Aufwands werden neue Daten im Speicher erfasst. Schreibvorgänge werden in eine Warteschlange eingereiht und danach auf den Datenträger entleert. Abfrage- und Planinformationen, die im folgenden Diagramm als „Plan Store“ (Planspeicher) angezeigt werden, werden mit minimaler Latenz geleert. Die Laufzeitstatistiken (angezeigt als „Runtime Stats“) verbleiben solange wie die DATA_FLUSH_INTERVAL_SECONDS
-Option der SET QUERY_STORE
-Anweisung im Arbeitsspeicher. Sie können das Dialogfeld des -Abfragespeichers verwenden, um einen Wert für Datenleerungsintervall (Minuten) einzugeben, der intern in Sekunden konvertiert wird.
Wenn das System abstürzt oder heruntergefahren wird, während das Ablaufverfolgungsflag 7745 verwendet wird, kann der Abfragespeicher in einem mit DATA_FLUSH_INTERVAL_SECONDS
definierten Zeitraum Laufzeitdaten verlieren, die zwar erfasst, aber noch nicht gespeichert wurden. Der Standardwert von 900 Sekunden (15 Minuten) wird empfohlen, um ein Gleichgewicht zwischen der Abfrageerfassungsleistung und der Datenverfügbarkeit zu erzielen.
Wichtig
Der Grenzwert Maximale Größe (MB) wird nicht erzwungen. Die Speichergröße wird nur überprüft, wenn der Abfragespeicher Daten auf einen Datenträger schreibt. Das Intervall wird durch den Wert von Datenleerungsintervall festgelegt. Wenn der Abfragespeicher die maximale Größe zwischen Speichergrößenüberprüfungen überschritten hat, geht er in den schreibgeschützten Modus über. Bei Aktivierung von Größenbasierter Bereinigungsmodus wird auch der Bereinigungsmechanismus zum Erzwingen der maximalen Größe ausgelöst.
Hinweis
Wenn eine Arbeitsspeicherauslastung des Systems auftritt, können Laufzeitstatistiken früher auf den Datenträger geleert werden als durch DATA_FLUSH_INTERVAL_SECONDS
definiert.
Während die Abfragespeicherdaten gelesen werden, werden arbeitsspeicherinterne und auf dem Datenträger gespeicherte Daten transparent zusammengeführt.
Wenn eine Sitzung beendet oder die Clientanwendung neu gestartet wird oder abstürzt, werden keine Abfragestatistiken aufgezeichnet.
Siehe auch
Überwachen der Leistung mit dem Abfragespeicher
Bewährte Methode für den Abfragespeicher
Query Store Catalog Views (Transact-SQL)