Wie überprüfe ich laufende Abfragen und diagnostiziere Probleme mit dem Ressourcenverbrauch für meine Amazon RDS- oder Aurora PostgreSQL-DB-Instance?

Lesedauer: 4 Minute
0

Ich muss sehen, welche Abfragen aktiv auf einer Amazon Relational Database Service (Amazon RDS) oder Amazon Aurora PostgreSQL-DB-Instance ausgeführt werden. Wie kann ich das machen?

Behebung

Überprüfen Sie laufende Abfragen

Ihrem Benutzerkonto muss die Rolle rds_superuser zugewiesen werden, um alle Prozesse sehen zu können, die auf einer DB-Instance von RDS for PostgreSQL oder Aurora PostgreSQL ausgeführt werden. Andernfalls zeigt pg_stat_activity nur Abfragen an, die für seine eigenen Prozesse ausgeführt werden. Weitere Informationen finden Sie in der PostgreSQL-Dokumentation für Der Statistikkollektor.

1.Stellen Sie eine Verbindung zu der DB-Instance her, auf der PostgreSQL oder Aurora PostgreSQL ausgeführt wird.

2.Führen Sie den folgenden Befehl aus:

SELECT * FROM pg_stat_activity ORDER BY pid;

Sie können diesen Befehl auch ändern, um die Liste der laufenden Abfragen anzuzeigen, sortiert nach dem Zeitpunkt, an dem die Verbindungen hergestellt wurden:

SELECT * FROM pg_stat_activity ORDER BY backend_start;

Wenn der Spaltenwert Null ist, ist in dieser Sitzung keine Transaktion geöffnet:

SELECT * FROM pg_stat_activity ORDER BY xact_start;

Oder sehen Sie sich dieselbe Liste laufender Abfragen an, sortiert nach dem Zeitpunkt, an dem die letzte Abfrage ausgeführt wurde:

SELECT * FROM pg_stat_activity ORDER BY query_start;

Führen Sie für eine aggregierte Ansicht der Warteereignisse, falls vorhanden, den folgenden Befehl aus:

select state, wait_event, wait_event_type, count(*) from pg_stat_activity group by 1,2,3 order by wait_event;

Den Ressourcenverbrauch diagnostizieren

Indem Sie pg_stat_activity verwenden und Enhanced Monitoring aktivieren, können Sie die Abfrage/den Prozess identifizieren, der große Mengen an Systemressourcen beansprucht. Nachdem Sie Enhanced Monitoring aktiviert haben, stellen Sie sicher, dass die eingestellte Granularität ausreicht, um die Informationen zu sehen, die Sie zur Diagnose des Problems benötigen. Anschließend können Sie pg_stat_activity überprüfen, um die aktuellen Aktivitäten in Ihrer Datenbank und die Enhanced Monitoring-Metriken zu diesem Zeitpunkt einzusehen.

1.Identifizieren Sie die Abfrage, die Ressourcen verbraucht, indem Sie sich die Metrik der Betriebssystem-Prozessliste ansehen. Im folgenden Beispiel verbraucht der Prozess etwa 95% der CPU-Zeit auf der RDS-DB-Instance. Die Prozess-ID (PID) des Prozesses ist 14431 und der Prozess führt eine SELECT-Anweisung aus. Sie können die Auslastung des Systemspeichers auch überprüfen, indem Sie den Wert MEM% überprüfen.

NAMEVIRTRESCPU%MEM%VM-LIMIT
Postgres: Master-Postgres 27.0.3.145 (52003) WÄHLEN SIE [14431]457,66 MB27,7 MB95,152,78illimitiert

2.Stellen Sie eine Verbindung zu der DB-Instance her, auf der PostgreSQL oder Aurora PostgreSQL ausgeführt wird.

3.Identifizieren Sie die aktuelle Aktivität der Sitzung, indem Sie den folgenden Befehl ausführen:

SELECT * FROM pg_stat_activity WHERE pid = PID;

**Hinweis: **Ersetzen Sie die PID durch die PID, die Sie in Schritt 1 identifiziert haben.

4.Überprüfen Sie das Ergebnis des Befehls:

datid            | 14008
datname          | postgres
pid              | 14431
usesysid         | 16394
usename          | master
application_name | psql
client_addr      | 27.0.3.145
client_hostname  |
client_port      | 52003
backend_start    | 2020-03-11 23:08:55.786031+00
xact_start       | 2020-03-11 23:12:16.960942+00
query_start      | 2020-03-11 23:12:16.960942+00
state_change     | 2020-03-11 23:12:16.960945+00
wait_event_type  |
wait_event       |
state            | active
backend_xid      |
backend_xmin     | 812
query            | SELECT COUNT(*) FROM columns c1, columns c2, columns c3, columns c4, columns c5;
backend_type     | client backend

Um den Prozess zu beenden, der die Abfrage ausführt, rufen Sie die folgende Abfrage von einer anderen Sitzung aus auf. Achten Sie darauf, PID durch die PID des Prozesses zu ersetzen, den Sie in Schritt 3 identifiziert haben.

SELECT pg_terminate_backend(PID);

**Wichtig:**Bevor Sie Transaktionen beenden, sollten Sie die möglichen Auswirkungen jeder Transaktion auf den Status Ihrer Datenbank und Ihrer Anwendung abschätzen.


Weitere Informationen

Wie kann ich eine hohe CPU-Auslastung für Amazon RDS oder Amazon Aurora PostgreSQL beheben?

Rollen erstellen

Verbesserte Überwachung

PostgreSQL-Dokumentation für psql

PostgreSQL-Dokumentation für pg_stat_activity