Ü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
- Melden Sie sich beim Azure-Portal an, und wählen Sie Ihre Azure Database for PostgreSQL Flexible Server-Instanz aus.
- Wählen Sie im Bereich Einstellungen im Menü die Option Serverparameter aus.
- Suchen Sie nach dem Parameter
pg_qs.query_capture_mode
. - Legen Sie den Wert auf
top
oderall
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 derazure_sys
-Datenbank gespeichert ist.
Aktivieren der Stichprobenentnahme für Wartezeiten für den Abfragespeicher
- Suchen Sie nach dem Parameter
pgms_wait_sampling.query_capture_mode
. - Legen Sie für den Wert
all
fest und Speichern.
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. 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.