Wie überprüfe ich laufende Abfragen und diagnostiziere Probleme mit dem Ressourcenverbrauch für meine DB-Instance in Amazon RDS für PostgreSQL oder Aurora PostgreSQL?
Ich möchte die Abfragen anzeigen, die aktiv auf einer DB-Instance in Amazon Relational Database Service (Amazon RDS) für PostgreSQL ausgeführt werden. Oder für eine DB-Instance in Amazon Aurora PostgreSQL-Compatible Edition.
Lösung
Laufende Abfragen überprüfen
Dein Benutzerkonto muss über die Rolle rds_superuser verfügen, um alle Prozesse anzeigen zu können, die auf einer DB-Instance in Amazon RDS für PostgreSQL oder Aurora PostgreSQL-Compatible ausgeführt werden. Andernfalls zeigt pg_stat_activity die Abfragen an, die für ihre eigenen Prozesse ausgeführt werden. Weitere Informationen findest du in der PostgreSQL-Dokumentation für den Statistics Collector.
2. Führe den folgenden Befehl aus:
SELECT * FROM pg_stat_activity ORDER BY pid;
Du kannst diesen Befehl auch ändern, um die Liste der laufenden Abfragen anzuzeigen. Die Abfragen sind nach dem Zeitpunkt sortiert, an dem die Verbindungen hergestellt wurden:
SELECT * FROM pg_stat_activity ORDER BY backend_start;
Wenn der xact_start-Spaltenwert Null ist, wurde in dieser Sitzung keine Transaktion geöffnet:
SELECT * FROM pg_stat_activity ORDER BY xact_start;
Oder zeige dieselbe Liste laufender Abfragen an, sortiert nach dem Start der letzten Abfrage:
SELECT * FROM pg_stat_activity ORDER BY query_start;
Um eine aggregierte Ansicht der Warteereignisse anzuzeigen, falls es welche gibt, führe 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
Du kannst pg_stat_activity und Enhanced Monitoring verwenden, um die Abfrage oder den Prozess zu identifizieren, der große Mengen an Systemressourcen verbraucht. Nachdem du Enhanced Monitoring aktiviert hast, stelle die Granularität auf eine Ebene ein, die ausreicht, um die Informationen anzuzeigen, die du zur Diagnose des Problems benötigst. Überprüfe dann pg_stat_activity, um die aktuellen Aktivitäten in der Datenbank anzuzeigen. Du kannst zu diesem Zeitpunkt auch die Metriken von Enhanced Monitoring überprüfen.
1. Zeige die Metrik der Betriebssystemprozessliste an, um die Abfrage zu identifizieren, die Ressourcen verbraucht. Im folgenden Beispiel verbraucht der Prozess etwa 95 % der CPU-Zeit auf der RDS-DB-Instance. Die Prozess-ID (pid) des Prozesses ist 14431. Der Prozess führt eine SELECT-Anweisung aus. Du kannst auch MEM% überprüfen, um die Auslastung des Systemspeichers zu sehen.
| NAME | VIRT | RES | CPU% | MEM% | VMLIMIT |
| postgres: master postgres 27.0.3.145(52003) SELECT [14431] | 457,66 MB | 27,7 MB | 95,15 | 2,78 | unbegrenzt |
3. Führe den folgenden Befehl aus, um die aktuelle Aktivität der Sitzung zu ermitteln:
SELECT * FROM pg_stat_activity WHERE pid = PID;
Hinweis: Ersetze PID durch die pid, die du in Schritt 1 identifiziert hast.
4. Überprüfe 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 anzuhalten, der die Abfrage ausführt, rufe die folgende Abfrage von einer anderen Sitzung aus auf. Ersetze PID durch die pid des Prozesses, den du in Schritt 3 identifiziert hast.
SELECT pg_terminate_backend(PID);
Wichtig: Bevor du Transaktionen beendest, werte die potenziellen Auswirkungen aus, die jede Transaktion auf den Zustand der Datenbank und der Anwendung hat.
Ähnliche Informationen
Wie kann ich eine hohe CPU-Auslastung für Amazon RDS oder Aurora PostgreSQL beheben?
Grundlegendes zu PostgreSQL-Rollen und -Berechtigungen
psql (auf der PostgreSQL-Website)
pg_stat_activity (auf der PostgreSQL-Website)
- Themen
- Database
- Sprache
- Deutsch
Ähnliche Videos

