Statistiken zu aktiven partitionierten DMLs

Aktive partitionierte DML-Anweisungen (Data Manipulation Language) bieten Echtzeitinformationen zum Fortschritt der partitionierten DML-Anweisungen, die in Ihrer Datenbank aktiv sind.

Spanner bietet eine integrierte Tabelle, SPANNER_SYS.ACTIVE_PARTITIONED_DMLS, in der laufende partitionierte DML-Anweisungen und der Fortschritt aufgeführt sind.

Auf dieser Seite wird die Tabelle im Detail beschrieben. Außerdem werden einige Beispielabfragen gezeigt, die diese Tabelle verwenden. Schließlich wird demonstriert, wie Sie diese Abfragen verwenden können, um Probleme durch aktive partitionierte DMLs zu beheben. Die Informationen auf dieser Seite gelten für Datenbanken mit GoogleSQL-Dialekt und Datenbanken mit PostgreSQL-Dialekt.

Auf aktive Statistiken zur partitionierten DML zugreifen

Spanner stellt die aktiven Statistiken für partitionierte DML im Schema SPANNER_SYS bereit. Sie haben folgende Möglichkeiten, auf SPANNER_SYS-Daten zuzugreifen:

Die folgenden von Spanner bereitgestellten Einzellesemethoden unterstützen SPANNER_SYS nicht:

  • Starken Lesevorgang aus einer einzelnen Zeile oder mehreren Zeilen in einer Tabelle durchführen
  • Veralteten Lesevorgang aus einer einzelnen Zeile oder mehreren Zeilen in einer Tabelle durchführen
  • Aus einer einzelnen Zeile oder mehreren Zeilen in einem sekundären Index lesen

ACTIVE_PARTITIONED_DMLS

SPANNER_SYS.ACTIVE_PARTITIONED_DMLS gibt eine Liste aktiver partitionierter DMLs zurück, sortiert nach ihrer Startzeit.

Tabellenschema

Unten sehen Sie das Tabellenschema für SPANNER_SYS.ACTIVE_PARTITIONED_DMLS.

Spaltenname Typ Beschreibung
TEXT STRING Der Text der partitionierten DML-Abfrageanweisung.
TEXT_FINGERPRINT INT64 Der Fingerabdruck ist ein Hash des partitionierten DML-Texts.
SESSION_ID STRING Die ID der Sitzung, in der die partitionierte DML ausgeführt wird. Durch Löschen der Sitzungs-ID wird die Abfrage abgebrochen.
NUM_PARTITIONS_TOTAL INT64 Die Gesamtzahl der Partitionen in der partitionierten DML.
NUM_PARTITIONS_COMPLETE INT64 Die Anzahl der Partitionen, für die die partitionierte DML abgeschlossen wurde.
NUM_TRIVIAL_PARTITIONS_COMPLETE INT64 Die Anzahl der vollständigen Partitionen, in denen keine Zeilen verarbeitet wurden.
PROGRESS DOUBLE Der Fortschritt einer partitionierten DML wird als Anzahl der abgeschlossenen nicht trivialen Partitionen geteilt durch die Gesamtzahl der nicht trivialen Partitionen berechnet.
ROWS_PROCESSED INT64 Die Anzahl der bisher verarbeiteten Zeilen, die nach Abschluss jeder Partition aktualisiert wird.
START_TIMESTAMP. TIMESTAMP Obergrenze für die Startzeit einer partitionierten DML.
LAST_UPDATE_TIMESTAMP TIMESTAMP Letzter Zeitstempel, zu dem die partitionierte DML Fortschritte gemacht hat. Wird nach Abschluss einer Partition aktualisiert.

Beispielabfragen

Sie können die folgenden Beispiel-SQL-Anweisungen mit den Clientbibliotheken, der Google Cloud CLI oder der Google Cloud -Konsole ausführen.

Am längsten laufende Abfragen auflisten

Die folgende Abfrage gibt eine Liste der laufenden partitionierten DMLs zurück, nach Startzeit der Abfrage sortiert.

SELECT text,
       session_id,
       num_partitions_total,
       num_partitions_complete,
       num_trivial_partitions_complete,
       progress,
       rows_processed,
       start_timestamp,
       last_update_timestamp
FROM spanner_sys.active_partitioned_dmls
ORDER BY start_timestamp ASC;
Text session_id num_partitions_total num_partitions_complete num_trivial_partitions_complete Fortschritt rows_processed start_timestamp last_update_timestamp
UPDATE Concerts SET VenueId = \'amazing venue\' WHERE SingerId < 900000 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 27 15 3 50,00 % 2398654 2024-01-21 15:56:30.498744-08:00 2024-01-22 15:56:39.049799-08:00
UPDATE Singers SET LastName = NULL WHERE LastName = '' 0028284f-0190-52f9-b396-aa588e034806 8 4 4 00,00% 0 2024-01-22 15:55:18.498744-08:00 2024-01-22 15:56:28.049799-08:00
DELETE from Singers WHERE SingerId > 1000000 0071a85e-7e5c-576b-8a17-f9bc3d157eea 8 4 3 20,00% 238654 2024-01-22 15:56:30.498744-08:00 2024-01-22 15:56:19.049799-08:00
UPDATE Singers SET MarketingBudget = 1000 WHERE true 036097a9-91d4-566a-a399-20c754eabdc2 8 5 0 62,50% 238654 2024-01-22 15:57:47.498744-08:00 2024-01-22 15:57:39.049799-08:00

Beschränkungen

Für die Verwendung der Tabelle SPANNER_SYS.ACTIVE_PARTITIONED_DMLS gelten die folgenden Einschränkungen:

  • Die Ergebnisse für PROGRESS, ROWS_PROCESSED und LAST_UPDATE_TIMESTAMP werden an abgeschlossenen Partitionsgrenzen erhöht. Daher werden bei partitionierter DML möglicherweise weiterhin Zeilen aktualisiert, während die Werte in diesen drei Feldern gleich bleiben.

  • Wenn es Millionen von Partitionen in einer partitionierten DML gibt, wird der Wert in der Spalte PROGRESS möglicherweise nicht den gesamten inkrementellen Fortschritt erfassen. Verwenden Sie NUM_PARTITIONS_COMPLETE und NUM_TRIVIAL_PARTITIONS_COMPLETE, um den Fortschritt genauer zu verfolgen.

  • Wenn Sie eine partitionierte DML-Anweisung mit einer RPC-Anfrage abbrechen, wird sie möglicherweise weiterhin in der Tabelle angezeigt. Wenn Sie eine partitionierte DML-Anweisung durch Löschen der Sitzung abbrechen, wird sie sofort aus der Tabelle entfernt. Weitere Informationen finden Sie unter Sitzungs-ID löschen.

Aktive partitionierte DML-Abfragedaten zur Fehlerbehebung bei hoher CPU-Auslastung verwenden

Abfragestatistiken und Transaktionsstatistiken bieten hilfreiche Informationen zur Fehlerbehebung bei Latenzen in einer Spanner-Datenbank. Diese Tools bieten Informationen zu bereits abgeschlossenen Abfragen. Manchmal müssen Sie jedoch wissen, was im System ausgeführt wird. Stellen Sie sich beispielsweise ein Szenario vor, in dem die CPU-Auslastung hoch ist und Sie folgende Fragen beantworten möchten.

  • Wie viele partitionierte DML-Anweisungen werden aktuell ausgeführt?
  • Was sind diese partitionierten DML-Anweisungen?
  • Wie viele dieser partitionierten DML-Anweisungen werden lange ausgeführt?
  • In welcher Sitzung wird die Abfrage ausgeführt?

Wenn Sie Antworten auf die vorhergehenden Fragen haben, können Sie die folgende Maßnahme ergreifen.

  • Löschen Sie die Sitzung, in der die Abfrage ausgeführt wird, um eine sofortige Lösung zu erhalten.
  • Reduzieren Sie die Häufigkeit einer partitionierten DML.

In der folgenden Schritt-für-Schritt-Anleitung untersuchen wir aktive partitionierte DMLs und ermitteln gegebenenfalls, welche Maßnahmen zu ergreifen sind, falls überhaupt.

Zusammenfassung aktiver partitionierter DMLs abrufen

In unserem Beispielszenario bemerken wir eine überdurchschnittliche CPU-Auslastung. Daher führen wir die folgende Abfrage aus, um die Anzahl der aktiven partitionierten DMLs zurückzugeben.

SELECT count(*) as active_count
FROM spanner_sys.active_partitioned_dmls;

Die Abfrage liefert das folgende Ergebnis.

active_count
22

Die beiden am längsten laufenden partitionierten DML-Anweisungen auflisten

Anschließend können wir eine Abfrage ausführen, um weitere Informationen zu den beiden ältesten laufenden partitionierten DMLs zu erhalten, sortiert nach der Startzeit der partitionierten DML.

SELECT text,
       session_id,
       num_partitions_total,
       num_partitions_complete,
       num_trivial_partitions_complete,
       progress,
       rows_processed,
       start_timestamp,
       last_update_timestamp
FROM spanner_sys.active_partitioned_dmls
ORDER BY start_timestamp ASC LIMIT 2;
Text session_id num_partitions_total num_partitions_complete num_trivial_partitions_complete Fortschritt rows_processed start_timestamp last_update_timestamp
UPDATE Concerts SET VenueId = \'amazing venue\' WHERE SingerId < 900000 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 27 15 3 50,00 % 2398654 2024-01-21 15:56:30.498744-08:00 2024-01-22 15:56:39.049799-08:00
UPDATE Singers SET LastName = NULL WHERE LastName = '' 0028284f-0190-52f9-b396-aa588e034806 8 4 4 00,00% 0 2024-01-22 15:55:18.498744-08:00 2024-01-22 15:56:28.049799-08:00

Teure Abfragen abbrechen

Wir haben eine partitionierte DML-Anweisung gefunden, die seit Tagen ausgeführt wird und nicht vorankommt. Mit dem folgenden gcloud spanner databases sessions delete-Befehl können Sie die Sitzung mit der Sitzungs-ID löschen, um die partitionierte DML abzubrechen.

gcloud spanner databases sessions delete\
   5bd37a99-200c-5d2e-9021-15d0dbbd97e6 \
    --database=singer_db --instance=test-instance

Nächste Schritte