Analysieren von Sperrstrukturen für Amazon Aurora PostgreSQL mit CloudWatch Database Insights - Amazon CloudWatch

Analysieren von Sperrstrukturen für Amazon Aurora PostgreSQL mit CloudWatch Database Insights

Um durch Sperren verursachte Leistungsprobleme zu beheben, können Sie Sperrstrukturen für PostgreSQL-Datenbanken von Amazon Aurora mit CloudWatch Database Insights analysieren.

  • Dropdown Aufgeteilt nach: Wählen Sie im Diagramm Datenbanklast die Dimensionen Blockierendes Objekt, Blockierende Sitzung oder Blockierendes SQL aus, um zu sehen, wie individuelle Top-Blocker im Laufe der Zeit zur DB-Last beitragen. Mit dem Diagramm „DB-Last“ können Sie analysieren, ob die Top-Blocker konstant sind oder sich häufig ändern. Anschließend können Sie Blocker beheben.

    Die Tabelle Top-SQL, bei der im Dropdown-Menü Aufgeteilt nach die Option „Blockierende Sitzung“ ausgewählt ist
  • Registerkarte Sperranalyse: Wählen Sie DB-Auslastungsanalyse und anschließend die Registerkarte Sperranalyse aus, um Informationen zu Sperrkonflikten in Ihrer Datenbank anzuzeigen.

    Die Tabelle Sperrstruktur im Dashboard „Datenbanklast“
Anmerkung

CloudWatch Database Insights unterstützt die Sperranalyse für alle Aurora-PostgreSQL-Versionen. Um Sperrstrukturen zu analysieren, muss der erweiterte Modus von Database Insights aktiviert sein. Informationen zum Aktivieren des erweiterten Modus finden Sie unter Aktivieren des erweiterten Modus von Database Insights für Amazon Aurora und Aktivieren des erweiterten Modus von Database Insights für Amazon Relational Database Service.

Die Registerkarte „Sperranalyse“ enthält Informationen zu Sperrkonflikten in Ihrer Datenbank. Die Sperrstruktur-Visualisierung zeigt die Beziehungen und Abhängigkeiten zwischen Sperranforderungen aus verschiedenen Sitzungen.

Database Insights erfasst alle 15 Sekunden Snapshots. Snapshots zeigen die Sperrdaten für Ihre Datenbank zu einem bestimmten Zeitpunkt.

Anmerkung

Wenn CloudWatch eine hohe Anzahl von Sperren erkennt, zeigt CloudWatch auf der Registerkarte Sperranalyse das Banner Hohe Anzahl von Sperren erkannt an. CloudWatch erkennt diesen Zustand, wenn CloudWatch in 15 aufeinanderfolgenden Minuten für jedes 15-Sekunden-Intervall einen Sperr-Snapshot erstellt.

Jeder Knoten in der Struktur steht für eine bestimmte Sitzung. Der übergeordnete Knoten ist eine Sitzung, die die untergeordneten Knoten blockiert.

Führen Sie die folgenden Schritte aus, um Sperrstrukturen zu analysieren.

Analysieren Sie Sperrstrukturen wie folgt:
  1. Melden Sie sich an der AWS-Managementkonsole an und öffnen Sie die CloudWatch-Konsole unter https://console.aws.amazon.com/cloudwatch/.

  2. Wählen Sie Insights aus.

  3. Wählen Sie Database Insights aus.

  4. Wählen Sie die Ansicht Datenbank-Instance aus.

  5. Wählen Sie eine DB-Instance aus.

  6. Wählen Sie die Registerkarte DB-Auslastungsanalyse aus.

  7. Wählen Sie die Registerkarte Sperranalyse aus.

    Um Sperrdaten für eine DB-Instance anzuzeigen, wählen Sie einen Zeitraum von höchstens 1 Tag aus.

  8. Wählen Sie ein Snapshot-Fenster aus. Standardmäßig wählt Database Insights das Snapshot-Fenster mit den meisten blockierten Sitzungen aus.

    Tabelle „Sperranalyse“
  9. Um Sperrdaten für einen Snapshot anzuzeigen, wählen Sie den Zeitpunkt aus, zu dem Database Insights den Snapshot erfasst hat.

  10. Zum Erweitern einer Sperrstruktur wählen Sie den Pfeil neben der Sitzungs-ID aus.

    Erweiterte Sperrstruktur

Sperren von Snapshot-Daten

Database Insights liefert für jede Sperranforderung die folgenden Informationen. Um Spalten anzuzeigen, die standardmäßig nicht aktiviert sind, wählen Sie das Einstellungssymbol für die Tabelle Sperrstrukturen aus und aktivieren Sie andere Spalten.

Spaltenname Definition Standardspalte Hinweise

session_id

Die eindeutige Sitzungskennung.

Ja

Die session_id wird von HEX(pg_stat_activity.backend_start).HEX(pg_locks.pid) abgeleitet.

pid

Die PID dieses Backends.

Ja

pg_locks.pid

blocked_sessions_count

Die Anzahl der durch diese Sperre blockierten Sitzungen.

Ja

Die blocked_sessions_count wird von der Anzahl der durch diese Sperre blockierten Sitzungs-IDs abgeleitet.

last_query_executed

Die letzte von dieser Sitzung ausgeführte Abfrage. Bei Blockern ist es möglicherweise nicht die Abfrage, die die blockierende Sperre enthält.

Ja

pg_stat_activity.query

wait_event

Der Name des Warteereignisses, wenn das Backend gerade wartet, andernfalls ist der Wert NULL.

Ja

pg_stat_activity.wait_event

blocking_time_(In Seconds)

Die Zeit (in Sekunden) seit dem Start dieser Sperre.

Ja

Die blocking_time_(In Seconds) wird von der Startzeit der wartenden Transaktion (pg_locks.waitstart) für den ersten Waiter abgeleitet.

blocking_mode

Der Sperrmodus, der von der blockierenden Sitzung aufrechterhalten wurde.

Nein

pg_locks.mode

waiting_mode

Der von der wartenden Sitzung angeforderte Sperrmodus.

Nein

pg_locks.mode

application

Der Name der Anwendung, die mit diesem Backend verbunden ist.

Nein

pg_stat_activity.application_name

blocking_txn_start_time

Die Startzeit der blockierenden Transaktion oder Null, wenn keine Transaktion aktiv ist.

Nein

pg_stat_activity.xact_start

waiting_start_time

Die Zeit, zu der eine wartende Benutzersitzung begann, auf diese Sperre zu warten, oder Null, wenn die Sperre aufrechterhalten wurde.

Nein

pg_locks.waitstart

session_start_time

Die Startzeit einer Benutzersitzung.

Nein

pg_stat_activity.backend_start

state

Der Status eines Backends.

Nein

pg_stat_activity.state

wait_event_type

Der Typ des Warteereignisses, auf das diese Sitzung wartet.

Nein

pg_stat_activity.wait_event_type

last_query_exec_time

Die Startzeit der letzten Abfrage.

Nein

pg_stat_activity.query_start

user

Der Name des Benutzers, der bei diesem Backend angemeldet ist.

Nein

pg_stat_activity.usename

host

Der Hostname des verbundenen Clients gemäß einer umgekehrten DNS-Suche von client_addr. Dieses Feld ist nur für IP-Verbindungen ungleich Null und nur, wenn log_hostname aktiviert ist.

Nein

pg_stat_activity.client_hostname

port

Die TCP-Portnummer, die der Client für die Kommunikation mit diesem Backend verwendet, oder -1, wenn ein Unix-Socket verwendet wird. Wenn dieses Feld Null ist, handelt es sich hierbei um einen internen Serverprozess.

Nein

pg_stat_activity.client_port

client_address

Die IP-Adresse des Clients, der mit diesem Backend verbunden ist. Wenn dieses Feld Null ist, bedeutet das entweder, dass der Client über einen Unix-Socket auf dem Servercomputer verbunden ist oder dass es sich um einen internen Prozess wie Autovacuum handelt.

Nein

pg_stat_activity.client_addr

granted

Der Wert ist wahr, wenn die Sperre aufrechterhalten wird, und falsch, wenn die Sperre erwartet wird.

Nein

pg_locks.granted

waiting_tuple

Die Tupelnummer, die das Ziel der Sperre innerhalb der Seite ist, oder Null, wenn das Ziel kein Tupel ist.

Nein

pg_locks.tuple

waiting_page

Die Seitennummer, die das Ziel der Sperre innerhalb der Beziehung ist, oder Null, wenn das Ziel keine Beziehungsseite und kein Tupel ist.

Nein

pg_locks.page

waiting_transaction_id

Die ID der Transaktion, die das Ziel der Sperre ist, oder Null, wenn das Ziel keine Transaktions-ID ist.

Nein

pg_locks.transactionid

waiting_relation

Die OID der Beziehung, die das Ziel der Sperre ist, oder Null, wenn das Ziel keine Beziehung und kein Teil einer Beziehung ist.

Nein

pg_locks.relation

waiting_object_id

Die OID des Sperrziels innerhalb seines Systemkatalogs oder Null, wenn das Ziel kein allgemeines Datenbankobjekt ist.

Nein

pg_locks.objid

waiting_database_id

Die OID der Datenbank, in der sich das Sperrziel befindet, oder 0, wenn das Ziel ein gemeinsam genutztes Objekt ist, oder Null, wenn das Ziel eine Transaktions-ID ist.

Nein

pg_locks.database

waiting_database_name

Der Name der Datenbank, in der sich das Sperrziel befindet.

Nein

pg_stat_activity.datname

waiting_locktype

Der Typ des sperrbaren Objekts: relation, extend, frozenid, page, tuple, transactionid, virtualxid, spectoken, object, userlock, advisory oder applytransaction.

Nein

pg_locks.locktype

is_fastpath

Der Wert ist wahr, wenn die Sperre mit Fast Path abgerufen wurde, und falsch, wenn die Sperre aus der Hauptsperrtabelle abgerufen wurde.

Nein

pg_locks.fastpath

Weitere Informationen zu den Werten in den Ansichten pg_stat_activity und pg_locks finden Sie in den folgenden Themen der PostgreSQL-Dokumentation.