Freigeben über


Überwachen der Leistung mit dem Abfragespeicher

GILT FÜR: Azure Database for PostgreSQL – Flexibler Server

Der Abfragespeicher ist ein Feature in Azure Database for PostgreSQL – Flexibler Server, das es Ihnen ermöglicht, die Abfrageleistung im Zeitverlauf nachzuverfolgen. Der Abfragespeicher vereinfacht die Behandlung von Leistungsproblemen, da Sie die am längsten ausgeführten und ressourcenintensivsten Abfragen schnell ermitteln können. 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. Die Daten für alle Benutzer, Datenbanken und Abfragen werden in einer Datenbank namens azure_sys in der Instanz von Azure Database for PostgreSQL – Flexibler Server gespeichert.

Aktivieren des Abfragespeichers

Der Abfragespeicher kann ohne zusätzliche Gebühren genutzt werden. Er ist ein optionales Feature und daher auf einem Server nicht standardmäßig aktiviert. Der Abfragespeicher kann global für alle Datenbanken auf einem bestimmten Server aktiviert oder deaktiviert werden. Ein Aktivieren oder Deaktivieren für einzelne Datenbanken ist nicht möglich.

Wichtig

Aktivieren Sie den Abfragespeicher im Tarif „Burstfähig“ nicht, da dadurch die Leistung beeinträchtigt würde.

Aktivieren des Abfragespeichers im Azure-Portal

  1. Melden Sie sich beim Azure-Portal an, und wählen Sie Ihre Azure Database for PostgreSQL Flexible Server-Instanz aus.
  2. Wählen Sie im Bereich Einstellungen im Menü die Option Serverparameter aus.
  3. Suchen Sie nach dem Parameter pg_qs.query_capture_mode.
  4. Legen Sie den Wert auf top oder all fest, je nachdem, ob Sie Abfragen der obersten Ebene oder auch geschachtelte Abfragen (innerhalb einer Funktion oder Prozedur ausgeführte Abfragen) nachverfolgen möchten, 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.

Informationen im Abfragespeicher

Der Abfragespeicher besteht aus zwei Speichern:

  1. Ein Speicher für Laufzeitstatistiken zum Aufbewahren der Informationen aus den Abfragespeicherstatistiken.
  2. 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. Die Informationen in diesen Speichern können mithilfe von Ansichten abgefragt werden.

Zugreifen auf Abfragespeicherinformationen

Abfragespeicherdaten werden in der azure_sys-Datenbank in Ihrer Instanz von Azure Database for PostgreSQL – Flexibler Server gespeichert. Die folgende Abfrage gibt Informationen zu Abfragen zurück, die im Abfragespeicher aufgezeichnet wurden:

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

Warteereignistypen kombinieren verschiedene Warteereignisse nach Ähnlichkeit in Buckets. Der Abfragespeicher enthält den Warteereignistyp, den Namen des spezifischen Warteereignisses und die jeweilige Abfrage. Die Möglichkeit zum Korrelieren dieser Warteinformationen mit den Abfragelaufzeitstatistiken bedeutet, dass Sie einen ausführlicheren Überblick darüber erhalten, welche Faktoren sich auf die Abfrageleistung auswirken.

Im Folgenden finden Sie einige Beispiele, wie Sie mithilfe der Wartestatistiken im Abfragespeicher weitere Erkenntnisse zur Ihrer Workload erhalten können:

Beobachtung Aktion
Lange Sperrwartevorgänge Überprüfen Sie die Abfragetexte der betroffenen Abfragen, und identifizieren Sie die Zielentitäten. Suchen Sie im Abfragespeicher nach anderen Abfragen, die häufig ausgeführt werden und/oder eine lange 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 im Abfragespeicher nach Abfragen, die eine hohe Anzahl von physischen Lesevorgängen aufweisen. Wenn sie den Abfragen mit hohen E/A-Wartezeiten entsprechen, können Sie ggf. das Feature Automatisierte Indexoptimierung aktivieren, um festzustellen, ob es die Erstellung einiger Indizes empfehlen kann, die die Anzahl physischer Lesevorgänge für diese Abfragen verringern könnten.
Lange Arbeitsspeicher-Wartevorgänge Suchen Sie im Abfragespeicher nach den Abfragen mit dem höchsten Arbeitsspeicherverbrauch. Diese Abfragen verzögern wahrscheinlich zusätzlich den Fortschritt der betroffen Abfragen.

Konfigurationsoptionen

Wenn der Abfragespeicher aktiviert ist, werden Daten in Aggregationsfenstern gespeichert, deren Länge durch den Serverparameter pg_qs.interval_length_minutes bestimmt wird (standardmäßig 15 Minuten). Pro Fenster werden bis zu 500 unterschiedliche Abfragen gespeichert. Attribute zur Unterscheidung von Abfragen sind „user_id“ (Bezeichner des Benutzenden, der die Abfrage ausführt), „db_id“ (Bezeichner der Datenbank, in deren Kontext die Abfrage ausgeführt wird) und „query_id“ (ein ganzzahliger Wert zur eindeutigen Identifizierung der ausgeführten Abfrage). Wenn die Anzahl unterschiedlicher Abfragen während des konfigurierten Intervalls 500 erreicht, werden 5 % der aufgezeichneten Abfragen freigegeben, um Platz für weitere Abfragen zu schaffen. Als Erstes werden dabei die Abfragen freigegeben, die am wenigsten oft ausgeführt wurden.

Die folgenden Optionen stehen für die Konfiguration der Abfragespeicher-Parameter zur Verfügung:

Parameter Beschreibung Standard 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.is_enabled_fs Nur interne Verwendung: Dieser Parameter wird als Featureüberschreibungsoption verwendet. Wenn „off“ angezeigt wird, ist der Abfragespeicher trotz des für pg_qs.query_capture_mode festgelegten Werts deaktiviert. on on, off
pg_qs.max_plan_size Die maximale Anzahl von Bytes, die aus dem Abfrageplantext vom Abfragespeicher gespeichert wird (längere Pläne werden abgeschnitten). 7500 100 - 10000
pg_qs.max_query_text_length Die maximale Abfragelänge, die gespeichert werden 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, top, all
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 Abfragepläne im Abfragespeicher gespeichert werden sollen. off on, off
pg_qs.track_utility Gibt an, ob der Abfragespeicher Hilfsprogrammbefehle nachverfolgen muss. on on, off

(*) Statischer Serverparameter, der einen Serverneustart erfordert, damit eine Änderung des Werts wirksam wird

Die folgenden Optionen gelten speziell für Wartestatistiken:

Parameter Beschreibung Standard Bereich
pgms_wait_sampling.history_period Die Häufigkeit in Millisekunden, mit der Stichproben von Warteereignissen erfasst werden. 100 1 - 600000
pgms_wait_sampling.is_enabled_fs Nur interne Verwendung: Dieser Parameter wird als Featureüberschreibungsoption verwendet. Wenn off angezeigt wird, ist die Stichprobenentnahme für Wartezeiten trotz des für pgms_wait_sampling.query_capture_mode festgelegten Werts deaktiviert. on on, off
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 Abfragespeicher aufgezeichneten Informationen mithilfe einiger Ansichten und Funktionen, die im query_store-Schema der azure_sys-Datenbank verfügbar sind, abfragen oder löschen. 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

Im Folgenden sind einige Beispiele aufgeführt, um zu veranschaulichen, wie diese Normalisierung funktioniert:

Nehmen Sie an, dass Sie eine Tabelle mit der folgenden Anweisung erstellen:

create table tableOne (columnOne int, columnTwo int);

Sie aktivieren die Datensammlung im Abfragespeicher, und ein oder mehrere Benutzer*innen führen die folgenden Abfragen in genau dieser 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 denselben query_id-Wert. Der Text, den der Abfragespeicher speichert, ist der der ersten Abfrage, die nach dem Aktivieren der Datensammlung ausgeführt wird. Daher würde dieser select * from tableOne; lauten.

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 Abfrageset verwenden jedoch denselben query_id-Wert, und der Text, der zum Identifizieren dieser Abfragen verwendet wird, ist der der ersten Abfrage im Batch select columnOne as c1, columnTwo as c2 from tableOne as t1 where columnOne = 1 and columnTwo = 1;.

Unten sehen Sie einige Abfragen, deren query_id-Werte nicht mit denen im vorherigen Batch übereinstimmen, und den Grund, warum dies der Fall ist:

Query (Abfrage):

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

Grund für Nichtübereinstimmung: Die Liste der Spalten bezieht sich auf die gleichen beiden Spalten (columnOne und columnTwo), aber die Reihenfolge, in der auf sie verwiesen wird, ist umgekehrt – columnOne, ColumnTwo im vorherigen Batch und ColumnTwo, columnOne in dieser Abfrage.

Query (Abfrage):

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

Grund für Nichtübereinstimmung: Die Reihenfolge, in der auf die in der WHERE-Klausel ausgewerteten Ausdrücke verwiesen wird, wird von columnOne = ? and ColumnTwo = ? im vorherigen Batch zu ColumnTwo = ? and columnOne = ? in dieser Abfrage umgekehrt.

Query (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.

Query (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 in den unterstützenden Tabellen des Abfragespeichers gespeichert wurden. Daten, die für das derzeit aktive Zeitfenster noch im Arbeitsspeicher aufgezeichnet werden, sind erst sichtbar, wenn das Zeitfenster abgelaufen ist und die flüchtigen Daten im Arbeitsspeicher gesammelt und in Tabellen auf dem Datenträger gespeichert werden. Diese Ansicht gibt eine andere Zeile für jede unterschiedliche Datenbank (db_id), jede*n Benutzer*in (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. Unterschiedliche Abfragen mit der gleichen Struktur werden gruppiert; dieser Text ist der Text für die erste Abfrage im Cluster. Der Standardwert für die maximale Länge des Abfragetextes beträgt 6000 und kann mithilfe des Abfragespeicherparameters pg_qs.max_query_text_length geändert werden. 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 Serverparameter pg_qs.interval_length_minutes definiert den Zeitbereich dieser Fenster (standardmäßig 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. Beachten Sie, dass bei parallelen Abfragen die Anzahl von Aufrufen für jede Ausführung 1 ist für den Back-End-Prozess, der die Ausführung der Abfrage steuert, plus ebenso viele weitere Einheiten für jeden Back-End-Workerprozess, der zur Zusammenarbeit beim Ausführen der parallelen Verzweigungen der Ausführungsstruktur gestartet wird.
total_time double precision Gesamte Abfrageausführungsdauer in Millisekunden
min_time double precision Minimale Abfrageausführungsdauer in Millisekunden
max_time double precision Maximale Abfrageausführungsdauer in Millisekunden
mean_time double precision Durchschnittliche Abfrageausführungsdauer in Millisekunden
stddev_time double precision Standardabweichung der Abfrageausführungsdauer in Millisekunden
rows bigint Gesamtanzahl der Zeilen, die abgerufen wurden oder von der Anweisung betroffen sind. Beachten Sie, dass bei parallelen Abfragen die Anzahl von Zeilen für jede Ausführung der Anzahl von Zeilen entspricht, die vom Back-End-Prozess, der die Ausführung der Abfrage steuert, an den Client zurückgegeben werden, plus die Summe aller Zeilen, die jeder Back-End-Workerprozess, der zur Zusammenarbeit beim Ausführen der parallelen Verzweigungen der Ausführungsstruktur gestartet wird, an den Back-End-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 double precision 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 double precision 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. Dieser Benutzer 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 war eine parametrisierte Abfrage, und Werte wurden erfolgreich erfasst), disabled (die Abfrage wurde parametrisiert, es wurden aber keine Parameter erfasst, weil pg_qs.parameters_capture_mode auf capture_parameterless_only festgelegt war), too_long_to_capture (die Abfrage wurde parametrisiert, es wurden aber keine Parameter erfasst, weil die Länge des resultierenden JSON-Objekts für die Anzeige in der Spalte query_parameters dieser Ansicht zu lang war, um vom Abfragespeicher gespeichert zu werden), too_many_to_capture (die Abfrage wurde parametrisiert, es wurden aber keine Parameter erfasst, da die Gesamtanzahl von Parametern zu hoch war, um vom Abfragespeicher gespeichert zu werden), serialization_failed (die Abfrage wurde parametrisiert, aber mindestens einer der Werte, die als Parameter übergeben wurden, 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 Art Beschreibung
query_text_id bigint ID der Tabelle query_texts
query_sql_text varchar(10000) Der Text einer repräsentativen Anweisung. Unterschiedliche Abfragen mit der gleichen Struktur werden gruppiert; dieser Text ist der Text für die erste Abfrage im Cluster.
query_type smallint Art des Vorgangs der Abfrage. In PostgreSQL <= 14 lauten die möglichen Werte 0 (unbekannt), 1 (auswählen), 2 (aktualisieren), 3 (einfügen), 4 (löschen), 5 (Hilfsprogramm), 6 (nichts). In PostgreSQL >= 15 lauten die möglichen Werte 0 (unbekannt), 1 (auswählen), 2 (aktualisieren), 3 (einfügen), 4 (löschen), 5 (zusammenführen), 6 (Hilfsprogramm), 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), jede*n Benutzer*in (user_id), jede Abfrage (query_id) und jedes Ereignis (event) zurück.

Name Typ Referenzen Beschreibung
start_time timestamp Abfragen werden nach Zeitfenstern aggregiert. Der Serverparameter pg_qs.interval_length_minutes definiert den Zeitbereich dieser Fenster (standardmäßig 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 des Benutzers, 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 bisher vom Abfragespeicher gesammelt wurden. Sie verwirft die Statistiken für abgeschlossene Zeitfenster, die bereits in Tabellen auf dem Datenträger gespeichert wurden. Sie verwirft auch die Statistiken für das aktuelle Zeitfenster, 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 gesammelt wurden (d. h. die Daten im Arbeitsspeicher, die noch nicht in Tabellen auf dem Datenträger geleert wurden, die die Persistenz von gesammelten Daten für den Abfragespeicher unterstützen). Nur Mitglieder der Rolle „Serveradministrator“ (azure_pg_admin) können diese Funktion ausführen.

Schreibgeschützter Modus

Wenn sich eine Instanz von Azure Database for PostgreSQL – Flexibler Server im schreibgeschützten Modus befindet, z. B. weil der Parameter default_transaction_read_only auf on festgelegt ist oder der schreibgeschützte Modus automatisch aktiviert wurde, da die Speicherkapazität erschöpft ist, erfasst der Abfragespeicher keine Daten.

Durch das Aktivieren des Abfragespeichers auf einem Server mit Lesereplikaten wird der Abfragespeicher nicht automatisch für die Lesereplikate aktiviert. Auch wenn Sie ihn für eines der Lesereplikate aktivieren, zeichnet der Abfragespeicher die Abfragen auf Lesereplikaten nicht auf, da diese im schreibgeschützten Modus ausgeführt werden. Sie müssen sie zunächst zu primären Replikaten höherstufen.

Teilen Sie Ihre Vorschläge und Fehler mit dem Azure Database for PostgreSQL-Produktteam.