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 Seite Spanner Studio einer Datenbank in der Google Cloud Console.
Die Methode
executeSql
oderexecuteStreamingSql
.
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
undLAST_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 SieNUM_PARTITIONS_COMPLETE
undNUM_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
- Weitere Informationen zu Tools zur Selbstbeobachtung
- Weitere Informationen zu dem, was Spanner für jede Datenbank in den Informationsschematabellen der Datenbank speichert
- SQL-Best-Practices für Spanner