Abfragespeicher in Azure Database for PostgreSQL flexiblen Server

Der Abfragespeicher ist ein Feature in einem Azure Database for PostgreSQL flexiblen Server, der eine Möglichkeit zum Nachverfolgen der Abfrageleistung im Laufe der Zeit bietet. Der Abfragespeicher vereinfacht die Problembehandlung bei Leistungsproblemen, indem Sie schnell die längsten und ressourcenintensiven Abfragen finden. Der Abfragespeicher erfasst automatisch einen Verlauf der Abfragen und Laufzeitstatistiken und bewahrt diese auf, damit Sie sie überprüfen können. Es teilt die Daten nach Zeit auf, so dass Sie zeitliche Nutzungsmuster sehen können. Daten für alle Benutzer, Datenbanken und Abfragen werden in einer Datenbank gespeichert, die im Azure Database for PostgreSQL flexiblen Server benannt azure_sys ist.

Aktivieren des Abfragespeichers

Der Abfragespeicher ist kostenlos verfügbar. Es handelt sich um ein Opt-In-Feature, sodass es nicht standardmäßig auf einem Server aktiviert ist. Sie können den Abfragespeicher global für alle Datenbanken auf einem bestimmten Server aktivieren oder deaktivieren. Sie können sie nicht pro Datenbank aktivieren oder deaktivieren.

Von Bedeutung

Aktivieren Sie den Abfragespeicher nicht für den Tarif „Burstable“, da dies zu Leistungsproblemen führt.

Aktivieren des Abfragespeichers im Azure-Portal

  1. Melden Sie sich beim Azure Portal an, und wählen Sie Ihren Azure Database for PostgreSQL flexiblen Server aus.
  2. Wählen Sie " Parameter" im Abschnitt "Einstellungen" des Menüs aus.
  3. Suchen Sie nach dem Parameter pg_qs.query_capture_mode.
  4. Legen Sie den Wert top auf oder all, je nachdem, ob Sie Abfragen der obersten Ebene oder geschachtelte Abfragen nachverfolgen möchten (die in einer Funktion oder Prozedur ausgeführt werden), und wählen Sie "Speichern" aus. Es kann bis zu 20 Minuten dauern, bis der erste Datenbatch in der azure_sys-Datenbank gespeichert ist.

Aktivieren der Stichprobenentnahme für Wartezeiten für den Abfragespeicher

  1. Suchen Sie nach dem Parameter pgms_wait_sampling.query_capture_mode.
  2. Legen Sie für den Wert all fest und Speichern Sie.

Informationen im Abfragespeicher

Der Abfragespeicher besteht aus zwei Speichern:

  • Ein Speicher für Laufzeitstatistiken zum Aufbewahren der Informationen aus den Abfragespeicherstatistiken.
  • Ein Speicher für Wartestatistiken zum Aufbewahren der Informationen aus den Wartestatistiken.

Häufige Szenarien für die Verwendung des Abfragespeichers sind u. a.:

  • Bestimmen der Häufigkeit, mit der eine Abfrage in einem bestimmten Zeitfenster ausgeführt wurde.
  • Vergleichen der durchschnittlichen Ausführungszeit einer Abfrage über mehrere Zeitfenster hinweg, um große Abweichungen zu erkennen.
  • Ermitteln der am längsten ausgeführten Abfragen in den vergangenen Stunden.
  • Ermitteln der Top-N-Abfragen, die auf Ressourcen warten.
  • Verstehen der Wartezeiten für eine bestimmte Abfrage.

Um die Speicherverwendung zu minimieren, werden die Laufzeit-Ausführungsstatistiken im Speicher für Laufzeitstatistiken für ein festes, konfigurierbares Zeitfenster zusammengefasst. Sie können die Informationen in diesen Datenspeichern mithilfe von Ansichten abfragen.

Zugreifen auf Abfragespeicherinformationen

Azure Database for PostgreSQL Flexible Server speichert Abfragespeicherdaten in der Datenbank azure_sys. Die folgende Abfrage gibt Informationen zu Abfragen zurück, die der Abfragespeicher aufgezeichnet hat:

SELECT * FROM  query_store.qs_view;

Diese Abfrage gibt Informationen zu Wartestatistiken zurück:

SELECT * FROM  query_store.pgms_wait_sampling_view;

Suchen von wartenden Abfragen

Typen von Warteereignissen gruppieren verschiedene Warteereignisse basierend auf ihrer Ähnlichkeit in Kategorien. Abfragespeicher stellt den Typ des Wait-Ereignisses, den spezifischen Namen des Wait-Ereignisses und die fragliche Abfrage bereit. Wenn Sie diese Wartezeitinformationen mit den Abfragelaufzeitstatistiken korrelieren, erhalten Sie ein tieferes Verständnis darüber, was zur Abfrageleistungsmerkmale beiträgt.

Im Folgenden finden Sie einige Beispiele dafür, wie Sie mithilfe der Wartezeitstatistiken in Abfragespeicher mehr Einblicke in Ihre Arbeitsauslastung erhalten können:

Beobachtung Action
Lange Sperrwartevorgänge Überprüfen Sie die Abfragetexte der betroffenen Abfragen, und identifizieren Sie die Zielentitäten. Suchen Sie in Abfragespeicher nach anderen Abfragen, die häufig ausgeführt werden und eine hohe Dauer aufweisen und dieselbe Entität ändern. Nachdem Sie diese Abfragen ermittelt haben, ändern Sie ggf. die Anwendungslogik, um die Parallelität zu verbessern, oder verwenden Sie eine weniger restriktive Isolationsstufe.
Lange Puffer-E/A-Wartevorgänge Suchen Sie die Abfragen mit einer hohen Anzahl an physischen Lesevorgängen im Abfragespeicher. Wenn sie mit den Abfragen mit hohen E/A-Wartezeiten übereinstimmen, sollten Sie die Funktion autonome Optimierung aktivieren, um zu prüfen, ob das Erstellen einiger Indizes empfohlen wird, die die Anzahl der physischen Lesevorgänge für diese Abfragen möglicherweise reduzieren können.
Lange Arbeitsspeicher-Wartevorgänge Suchen Sie im Abfragespeicher nach den arbeitsspeicherintensivsten Abfragen. Diese Abfragen verzögern wahrscheinlich den weiteren Fortschritt der betroffenen Abfragen.

Konfigurationsoptionen

Wenn Sie den Abfragespeicher aktivieren, werden Daten in Aggregationsfenstern gespeichert. Die Länge dieser Fenster wird durch den Parameter pg_qs.interval_length_minutes bestimmt, der standardmäßig 15 Minuten beträgt. Für jedes Fenster speichert der Abfragespeicher bis zu 500 unterschiedliche Abfragen. Die Attribute, die die Eindeutigkeit jeder Abfrage unterscheiden, sind user_id (Bezeichner des Benutzers, der die Abfrage ausführt), db_id (Bezeichner der Datenbank, in dem die Abfrage ausgeführt wird) und query_id (ein ganzzahliger Wert, der die ausgeführte Abfrage eindeutig identifiziert). Wenn die Anzahl der unterschiedlichen Abfragen während des konfigurierten Intervalls 500 erreicht, führt der Abfragespeicher 5% der aufgezeichneten Abfragen aus, um Mehr Platz zu schaffen. Die zuerst freigegebenen Abfragen sind diejenigen, die am seltensten ausgeführt wurden.

Verwenden Sie die folgenden Optionen, um Abfragespeicher Parameter zu konfigurieren:

Parameter Beschreibung Vorgabe Bereich
pg_qs.interval_length_minutes Das Erfassungsintervall in Minuten für den Abfragespeicher. Definiert die Häufigkeit der Datenpersistenz. 15 1 - 30
pg_qs.max_captured_queries Maximale Anzahl von Abfragen, die der Abfragespeicher von allen Abfragen beibehält, die während jedes Erfassungsintervalls aufgezeichnet werden. 500 100 - 500
pg_qs.max_plan_size Maximale Anzahl von Bytes, die der Abfragespeicher aus dem Abfrageplantext speichert. Längere Pläne werden gekürzt. 7500 100 - 10000
pg_qs.max_query_text_length Die maximale Abfragelänge, die der Abfragespeicher speichern kann. Längere Abfragen werden abgeschnitten. 6000 100 - 10000
pg_qs.parameters_capture_mode Gibt an, ob und wann Abfragepositionsparameter erfasst werden sollen. capture_parameterless_only capture_parameterless_only, capture_first_sample
pg_qs.query_capture_mode Anweisungen, die nachverfolgt werden sollen. none none, topall
pg_qs.retention_period_in_days Der Aufbewahrungszeitraum in Tagen für den Abfragespeicher. Ältere Daten werden automatisch gelöscht. 7 1 - 30
pg_qs.store_query_plans Gibt an, ob der Abfragespeicher Abfragepläne speichern soll. off on, off
pg_qs.track_utility Gibt an, ob der Abfragespeicher Hilfsprogrammbefehle nachverfolgen muss. on on, off

Hinweis

Wenn Sie den Wert für den pg_qs.max_query_text_length Parameter ändern, verwendet der Text aller Abfragen, die der Abfragespeicher erfasst hat, bevor Sie die Änderung vornehmen, dieselbe query_id und sql_query_text. Dieses Verhalten kann den Eindruck erwecken, dass der neue Wert nicht wirksam wird, aber für Abfragen, die der Abfragespeicher noch nicht erfasst hat, sehen Sie, dass der Abfragetext die neu konfigurierte maximale Länge verwendet. Dieses Verhalten ist designiert und wird bei Ansichten und Funktionen erläutert. Wenn Sie query_store.qs_reset ausführen, werden alle Informationen entfernt, die der Abfragespeicher bis jetzt aufgezeichnet hat, einschließlich des Texts, der für jede Abfrage-ID erfasst wurde. Wenn eine dieser Abfragen erneut ausgeführt wird, wird die neu konfigurierte maximale Länge auf den erfassten Text angewendet.

Die folgenden Optionen gelten speziell für Wartestatistiken:

Parameter Beschreibung Vorgabe Bereich
pgms_wait_sampling.history_period Die Häufigkeit in Millisekunden, mit der Stichproben von Warteereignissen erfasst werden. 100 1 - 600000
pgms_wait_sampling.query_capture_mode Gibt an, welche Anweisungen die pgms_wait_sampling-Erweiterung nachverfolgen muss. none none, all

Hinweis

pg_qs.query_capture_mode hat Vorrang vor pgms_wait_sampling.query_capture_mode. Wenn pg_qs.query_capture_mode auf none festgelegt ist, hat die Einstellung pgms_wait_sampling.query_capture_mode keine Auswirkung.

Verwenden Sie dasAzure-Portal, um für einen Parameter einen anderen Wert abzurufen oder festzulegen.

Ansichten und Funktionen

Sie können die vom Query Store erfassten Informationen abfragen und löschen, indem Sie die im Schema query_store der azure_sys-Datenbank verfügbaren Sichten und Funktionen verwenden. In der öffentlichen PostgreSQL-Rolle kann jeder diese Ansichten verwenden, um die Daten im Abfragespeicher anzuzeigen. Diese Ansichten sind nur in der azure_sys-Datenbank verfügbar.

Abfragen werden normalisiert, indem ihre Struktur analysiert und alles ignoriert wird, das nicht semantisch signifikant ist, z. B. Literale, Konstanten, Aliase oder Unterschiede bei der Groß-/Kleinschreibung.

Wenn zwei Abfragen semantisch identisch sind, auch wenn sie unterschiedliche Aliase für die gleichen Spalten und Tabellen verwenden, werden sie mit demselben query_id-Wert identifiziert. Wenn sich zwei Abfragen nur in den darin verwendeten Literalwerten unterscheiden, werden sie auch mit demselben query_id-Wert identifiziert. Bei Abfragen, die mit demselben query_id-Wert identifiziert wurden, entspricht der sql_query_text-Wert der Abfrage, die seit dem Beginn der Aufzeichnungsaktivität im Abfragespeicher zuerst ausgeführt wurde, oder seit dem letzten Verwerfen der gespeicherten Daten, da die Funktion query_store.qs_reset ausgeführt wurde.

Funktionsweise der Abfragenormalisierung

Die folgenden Beispiele veranschaulichen, wie die Abfragenormalisierung funktioniert:

Angenommen, Sie erstellen eine Tabelle mithilfe der folgenden Anweisung:

create table tableOne (columnOne int, columnTwo int);

Sie aktivieren Abfragespeicher Datensammlung, und mindestens ein Benutzer führt die folgenden Abfragen in dieser genauen Reihenfolge aus:

select * from tableOne;
select columnOne, columnTwo from tableOne;
select columnOne as c1, columnTwo as c2 from tableOne as t1;
select columnOne as "column one", columnTwo as "column two" from tableOne as "table one";

Alle vorherigen Abfragen verwenden dieselbe Abfrage-ID. Abfragespeicher behält den Text der ersten Abfrage bei, die ausgeführt wird, nachdem Sie die Datensammlung aktiviert haben. Daher ist der Text select * from tableOne;.

Sobald die folgenden Abfragen normalisiert sind, stimmen sie nicht mit den vorherigen Abfragen überein, da die WHERE-Klausel sie semantisch unterschiedlich macht:

select columnOne as c1, columnTwo as c2 from tableOne as t1 where columnOne = 1 and columnTwo = 1;
select * from tableOne where columnOne = -3 and columnTwo = -3;
select columnOne, columnTwo from tableOne where columnOne = '5' and columnTwo = '5';
select columnOne as "column one", columnTwo as "column two" from tableOne as "table one" where columnOne = 7 and columnTwo = 7;

Alle Abfragen in diesem letzten Satz verwenden jedoch dieselbe Abfrage-ID. Der Text, der sie identifiziert, ist der Text der ersten Abfrage im Batch: select columnOne as c1, columnTwo as c2 from tableOne as t1 where columnOne = 1 and columnTwo = 1;.

Schließlich stimmen die folgenden Abfragen nicht mit der Abfrage-ID der Abfragen im vorherigen Batch überein. Der Grund, warum sie nicht übereinstimmen, wird in der folgenden Liste erläutert:

Abfrage:

select columnTwo as c2, columnOne as c1 from tableOne as t1 where columnOne = 1 and columnTwo = 1;

Grund für den Nichtabgleich: Die Liste der Spalten bezieht sich auf die gleichen beiden Spalten (columnOne und ColumnTwo), aber die Reihenfolge wird umgekehrt. Die Reihenfolge ändert sich vom vorherigen Batch mit columnOne, ColumnTwo zu dieser Abfrage mit ColumnTwo, columnOne.

Abfrage:

select * from tableOne where columnTwo = 25 and columnOne = 25;

Grund für den Nichtabgleich: Die Reihenfolge, in der die Ausdrücke in der WHERE-Klausel ausgewertet werden, wird umgekehrt. Die Reihenfolge ändert sich von columnOne = ? and ColumnTwo = ? im vorherigen Batch zu ColumnTwo = ? and columnOne = ? in dieser Abfrage.

Abfrage:

select abs(columnOne), columnTwo from tableOne where columnOne = 12 and columnTwo = 21;

Grund für Nichtübereinstimmung: Der erste Ausdruck in der Spaltenliste ist nicht mehr columnOne, aber die abs-Funktion wird über columnOne (abs(columnOne)) ausgewertet, was nicht semantisch gleichwertig ist.

Abfrage:

select columnOne as "column one", columnTwo as "column two" from tableOne as "table one" where columnOne = ceiling(16) and columnTwo = 16;

Grund für Nichtübereinstimmung: Der erste Ausdruck in der WHERE-Klausel wertet die Gleichheit von columnOne nicht mehr mit einem Literal aus, sondern mit dem Ergebnis der ceiling-Funktion, das über ein Literal ausgewertet wird, was nicht semantisch gleichwertig ist.

Ansichten

query_store.qs_view

Diese Ansicht gibt alle Daten zurück, die der Abfragespeicher in den unterstützenden Tabellen enthält. Daten, die der Query Store für das derzeit aktive Zeitfenster noch im Arbeitsspeicher erfasst, sind erst sichtbar, wenn das Zeitfenster endet und die flüchtigen Daten im Arbeitsspeicher gesammelt und in auf dem Datenträger gespeicherten Tabellen gespeichert werden. Diese Ansicht gibt eine andere Zeile für jede unterschiedliche Datenbank (db_id), alle Benutzenden (user_id) und jede Abfrage (query_id) zurück.

Name Typ Referenzen Beschreibung
runtime_stats_entry_id bigint Die ID aus der Tabelle runtime_stats_entries
user_id oid pg_authid.oid Die OID des Benutzers oder der Benutzerin, der oder die die Anweisung ausgeführt hat.
db_id oid pg_database.oid Die OID der Datenbank, in der die Anweisung ausgeführt wurde.
query_id bigint Interner Hash, der von der Analysestruktur der Anweisung berechnet wurde.
query_sql_text varchar(10000) Der Text einer repräsentativen Anweisung. Verschiedene Abfragen mit derselben Struktur werden gruppiert. Dieser Text ist der Text für die erste der Abfragen im Cluster. Der Standardwert für die maximale Textlänge der Abfrage beträgt 6.000, und Sie können ihn mithilfe des Abfragespeicherparameters pg_qs.max_query_text_lengthändern. Wenn der Text der Abfrage diesen Maximalwert überschreitet, wird er auf die ersten pg_qs.max_query_text_length Bytes gekürzt.
plan_id bigint ID des Plans, der dieser Abfrage entspricht.
start_time Zeitstempel Abfragen werden nach Zeitfenstern aggregiert. Der Parameter pg_qs.interval_length_minutes definiert die Zeitspanne dieser Fenster (Standardwert ist 15 Minuten). Diese Spalte entspricht der Startzeit des Fensters, in dem dieser Eintrag aufgezeichnet wurde.
end_time Zeitstempel Dies ist die Endzeit, die dem Zeitfenster für diesen Eintrag entspricht.
calls bigint Häufigkeit, mit der die Abfrage in diesem Zeitfenster ausgeführt wird. Bei parallelen Abfragen entspricht die Anzahl der Aufrufe pro Ausführung 1 für den Backend-Prozess, der die Ausführung der Abfrage steuert, plus jeweils eine weitere Einheit für jeden Backend-Worker-Prozess, der gestartet wird, um an der Ausführung der parallelen Zweige des Ausführungsbaums mitzuwirken.
total_time Doppelte Genauigkeit Gesamte Abfrageausführungsdauer in Millisekunden.
min_time Doppelte Genauigkeit Minimale Abfrageausführungsdauer in Millisekunden
max_time Doppelte Genauigkeit Maximale Abfrageausführungsdauer in Millisekunden
mean_time Doppelte Genauigkeit Durchschnittliche Abfrageausführungsdauer in Millisekunden
stddev_time Doppelte Genauigkeit Standardabweichung der Abfrageausführungsdauer in Millisekunden.
rows bigint Gesamtanzahl der Zeilen, die abgerufen wurden oder von der Anweisung betroffen sind. Bei parallelen Abfragen entspricht die Anzahl der Zeilen für jede Ausführung der Anzahl der Zeilen, die vom Backend-Prozess, der die Ausführung der Abfrage steuert, an den Client zurückgegeben werden, zuzüglich der Summe aller Zeilen, die jeder zur gemeinsamen Ausführung der parallelen Zweige des Ausführungsbaums gestartete Backend-Worker-Prozess an den Backend-Prozess zurückgibt, der die Ausführung der Abfrage steuert.
shared_blks_hit bigint Gesamtanzahl der freigegebenen Blockcachetreffer der Anweisung
shared_blks_read bigint Gesamtanzahl der freigegebenen Blöcke, die von der Anweisung gelesen wurden
shared_blks_dirtied bigint Gesamtanzahl der freigegebenen Blöcke, die von der Anweisung geändert wurden
shared_blks_written bigint Gesamtanzahl der freigegebenen Blöcke, die von der Anweisung geschrieben wurden
local_blks_hit bigint Gesamtanzahl der lokalen Blockcachetreffer der Anweisung
local_blks_read bigint Gesamtanzahl der lokalen Blöcke, die von der Anweisung gelesen wurden
local_blks_dirtied bigint Gesamtanzahl der lokalen Blöcke, die von der Anweisung geändert wurden
local_blks_written bigint Gesamtanzahl der lokalen Blöcke, die von der Anweisung geschrieben wurden
temp_blks_read bigint Gesamtanzahl der temporären Blöcke, die von der Anweisung gelesen wurden
temp_blks_written bigint Gesamtanzahl der temporären Blöcke, die von der Anweisung geschrieben wurden
blk_read_time Doppelte Genauigkeit Gesamtzeit in Millisekunden, die die Anweisung zum Lesen von Blöcken benötigt hat (wenn „track_io_timing“ aktiviert ist, andernfalls 0)
blk_write_time Doppelte Genauigkeit Gesamtzeit in Millisekunden, die die Anweisung zum Schreiben von Blöcken benötigt hat (wenn „track_io_timing“ aktiviert ist, andernfalls 0).
is_system_query boolean Bestimmt, ob die Rolle mit user_id = 10 (azuresu) die Abfrage ausgeführt hat. Diese Person verfügt über Superuserberechtigungen und wird zum Ausführen von Vorgängen auf der Steuerungsebene verwendet. Da dieser Dienst ein verwalteter PaaS-Dienst ist, ist nur Microsoft Mitglied der Rolle „Superuser“.
query_type Text Art des Vorgangs der Abfrage. Mögliche Werte sind unknown, select, update, insert, delete, merge, utility, nothing und undefined.
search_path Text Der Wert von search_path, der beim Erfassen der Abfrage festgelegt wurde.
query_parameters Text Die Textdarstellung eines JSON-Objekts mit den Werten, die an die Positionsparameter einer parametrisierten Abfrage übergeben wurden. Diese Spalte füllt ihren Wert nur in zwei Fällen auf: 1) Bei nicht parametrisierten Abfragen. 2) Bei parametrisierten Abfragen, wenn pg_qs.parameters_capture_mode auf capture_first_sample festgelegt ist und der Abfragespeicher die Werte für die Parameter der Abfrage zur Ausführungszeit abrufen kann.
parameters_capture_status Text Art des Vorgangs der Abfrage. Mögliche Werte sind succeeded (entweder wurde die Abfrage nicht parametrisiert, oder es handelte sich um eine parametrisierte Abfrage und die Werte wurden erfolgreich erfasst), disabled (die Abfrage wurde parametrisiert, die Parameter wurden jedoch nicht erfasst, da pg_qs.parameters_capture_mode auf capture_parameterless_only festgelegt wurde), too_long_to_capture (die Abfrage wurde parametrisiert, die Parameter wurden jedoch nicht erfasst, weil die Länge des resultierenden JSON-Dokuments, das in der Spalte query_parameters dieser Ansicht angezeigt würde, als zu lang für die Persistierung im Abfragespeicher angesehen wurde), too_many_to_capture (die Abfrage wurde parametrisiert, die Parameter wurden jedoch nicht erfasst, weil die Gesamtzahl der Parameter als zu hoch für die Persistierung im Abfragespeicher angesehen wurde), serialization_failed (die Abfrage wurde parametrisiert, aber mindestens einer der als Parameter übergebenen Werte konnte nicht als Text serialisiert werden).

query_store.query_texts_view

Diese Ansicht gibt alle Abfragetextdaten im Abfragespeicher zurück. Für jede unterschiedliche query_sql_text-Wert gibt es eine Zeile.

Name Typ Beschreibung
query_text_id bigint ID der query_texts-Tabelle
query_sql_text varchar(10000) Der Text einer repräsentativen Anweisung. Verschiedene Abfragen mit derselben Struktur werden gruppiert. Dieser Text ist der Text für die erste der Abfragen im Cluster.
query_type smallint Art des Vorgangs der Abfrage. In Versionen von PostgreSQL <= 14 sind mögliche Werte 0 (unbekannt), 1 (Auswahl), 2 (Aktualisierung), 3 (Einfügen), 4 (Löschen), 5 (Dienstprogramm), 6 (nichts). In PostgreSQL-Versionen >= 15 sind die möglichen Werte 0 (unbekannt), 1 (select), 2 (update), 3 (insert), 4 (delete), 5 (merge), 6 (utility), 7 (nichts).

query_store.pgms_wait_sampling_view

Diese Ansicht gibt Warteereignisdaten im Abfragespeicher zurück. Diese Ansicht gibt eine andere Zeile für jede unterschiedliche Datenbank (db_id), alle Benutzenden (user_id), jede Abfrage (query_id) und jedes Ereignis (event) zurück.

Name Typ Referenzen Beschreibung
start_time Zeitstempel Abfragen werden nach Zeitfenstern aggregiert. Der Parameter pg_qs.interval_length_minutes definiert die Zeitspanne dieser Fenster (Standardwert ist 15 Minuten). Diese Spalte entspricht der Startzeit des Fensters, in dem dieser Eintrag aufgezeichnet wurde.
end_time Zeitstempel Dies ist die Endzeit, die dem Zeitfenster für diesen Eintrag entspricht.
user_id oid pg_authid.oid Der Objektbezeichner der Benutzerin oder des Benutzers, die oder der die Anweisung ausgeführt hat.
db_id oid pg_database.oid Der Objektbezeichner der Datenbank, in der die Anweisung ausgeführt wurde.
query_id bigint Interner Hash, der von der Analysestruktur der Anweisung berechnet wurde.
event_type Text Art des Ereignisses, auf das das Back-End wartet.
event Text Der Warteereignisname, wenn das Back-End derzeit wartet
calls integer Gibt an, wie oft dasselbe Ereignis erfasst wurde.

Hinweis

Eine Liste der möglichen Werte in den Spalten event_type und event der Ansicht query_store.pgms_wait_sampling_view finden Sie in der offiziellen Dokumentation zu pg_stat_activity. Suchen Sie dort nach Informationen zu Spalten mit denselben Namen.

query_store.query_plans_view

Diese Ansicht gibt den Abfrageplan zurück, der zum Ausführen einer Abfrage verwendet wurde. Es gibt eine Zeile für jede einzelne Datenbank-ID und Abfrage-ID. Der Abfragespeicher zeichnet nur Abfragepläne für Abfragen ohne Hilfsprogramme auf.

Name Typ Referenzen Beschreibung
plan_id bigint Der Hashwert aus dem normalisierten Abfrageplan, der von EXPLAIN erstellt wird. Er liegt in normalisierter Form vor, da die geschätzten Kosten für Planknoten und die Verwendung von Puffern nicht enthalten sind.
db_id oid pg_database.oid Die OID der Datenbank, in der die Anweisung ausgeführt wurde.
query_id bigint Interner Hash, der von der Analysestruktur der Anweisung berechnet wurde.
plan_text varchar(10000) Ausführungsplan der Anweisung mit den Angaben costs=false, buffers=false und format=text. Die Ausgabe ist mit der von EXPLAIN identisch.

Funktionen

query_store.qs_reset

Diese Funktion verwirft alle Statistiken, die der Abfragespeicher sammelt. Sie verwirft die Statistiken für abgeschlossene Zeitfenster, die bereits in Tabellen auf dem Datenträger gespeichert wurden. Außerdem werden die Statistiken für das aktuelle Zeitfenster verworfen, die nur im Arbeitsspeicher vorhanden sind. Nur Mitglieder der Rolle „Serveradministrator“ (azure_pg_admin) können diese Funktion ausführen.

query_store.staging_data_reset

Diese Funktion verwirft alle Statistiken, die vom Abfragespeicher im Arbeitsspeicher erfasst wurden. Diese Daten wurden noch nicht in die auf dem Datenträger gespeicherten Tabellen geschrieben, die die persistente Speicherung der für den Abfragespeicher erfassten Daten unterstützen. Nur Mitglieder der Rolle „Serveradministrator“ (azure_pg_admin) können diese Funktion ausführen.

Schreibgeschützter Modus

Wenn ein flexibler Azure Database for PostgreSQL-Server im schreibgeschützten Modus ist, zum Beispiel wenn der default_transaction_read_only-Parameter auf on gesetzt ist, oder wenn der schreibgeschützte Modus aufgrund des Erreichens der Speicherkapazität automatisch aktiviert wird, erfasst der Abfragespeicher keine Daten.

Das Aktivieren des Abfragespeichers auf einem Server, auf dem Lesereplikate vorhanden sind, aktiviert nicht automatisch den Abfragespeicher für eines der gelesenen Replikate. Auch wenn Sie sie für eines der gelesenen Replikate aktivieren, zeichnet der Abfragespeicher die abfragen, die für lesereplikate ausgeführt werden, nicht auf. Die Lesereplikate arbeiten im schreibgeschützten Modus, bis Sie sie zur Primärinstanz heraufstufen.