Die aktive partitionierte Datenbearbeitungssprache (DML) bietet Echtzeitfortschritte für die partitionierten DMLs, die derzeit in Ihrer Datenbank aktiv sind.
Spanner bietet die integrierte Tabelle SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
, in der laufende partitionierte DMLs und der Fortschritt bei deren Ausführung aufgeführt sind.
In diesem Artikel beschreiben wir die Tabelle ausführlich, zeigen einige Beispielabfragen, die diese Tabelle verwenden, und demonstrieren schließlich, wie Sie diese Abfragen verwenden können, um Probleme durch aktive partitionierte DMLs zu vermeiden.
Verfügbarkeit
SPANNER_SYS
-Daten sind nur über SQL-Schnittstellen verfügbar. Beispiel:
Die Seite Spanner Studio einer Datenbank in der Google Cloud -Console
Mit der
executeQuery
API
Andere von Spanner bereitgestellte Einzellesemethoden unterstützen SPANNER_SYS
nicht.
ACTIVE_PARTITIONED_DMLS
SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
gibt eine Liste aktiver partitionierter DMLs zurück, nach Startzeit sortiert.
Tabellenschema
Im Folgenden 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 berechnet, indem die Anzahl der abgeschlossenen nicht trivialen Partitionen durch die Gesamtzahl der nicht trivialen Partitionen geteilt wird. |
ROWS_PROCESSED |
INT64 |
Die Anzahl der bisher verarbeiteten Zeilen. Dieser Wert wird nach Abschluss jeder Partition aktualisiert. |
START_TIMESTAMP . |
TIMESTAMP |
Obergrenze für die Startzeit einer partitionierten DML. |
LAST_UPDATE_TIMESTAMP |
TIMESTAMP |
Letzter Zeitstempel, zu dem bei der partitionierten DML Fortschritte erzielt wurden. Wird nach Abschluss einer Partition aktualisiert. |
Beispielabfragen
Sie können folgende 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
Die Verwendung der Tabelle SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
hat folgende Einschränkungen:
Die Ergebnisse für
PROGRESS
,ROWS_PROCESSED
undLAST_UPDATE_TIMESTAMP
werden an den Enden abgeschlossener Partitionen erhöht. Daher werden bei der partitionierten DML möglicherweise weiterhin Zeilen aktualisiert, während die Werte in diesen drei Feldern gleich bleiben.Wenn eine partitionierte DML Millionen von Partitionen enthält, wird der Wert in der Spalte
PROGRESS
möglicherweise nicht den gesamten inkrementellen Fortschritt widerspiegeln. MitNUM_PARTITIONS_COMPLETE
undNUM_TRIVIAL_PARTITIONS_COMPLETE
kannst du den Fortschritt detaillierter verfolgen.Wenn Sie eine partitionierte DML mit einer RPC-Anfrage abbrechen, wird die abgebrochene partitionierte DML möglicherweise weiterhin in der Tabelle angezeigt. Wenn Sie eine partitionierte DML mit dem Löschen der Sitzung abbrechen, wird sie sofort aus der Tabelle entfernt. Weitere Informationen finden Sie unter Sitzungs-ID löschen.
Daten zu aktiven partitionierten DML-Abfragen 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 abgeschlossen Abfragen. Manchmal ist es jedoch notwendig zu 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 DMLs werden derzeit ausgeführt?
- Was sind diese partitionierten DMLs?
- Wie viele dieser partitionierten DMLs laufen schon lange?
- In welcher Sitzung wird die Abfrage ausgeführt?
Wenn Sie Antworten auf die vorherigen Fragen haben, können Sie folgende Maßnahme ergreifen.
- Löschen Sie die Sitzung, in der die Abfrage ausgeführt wird, um eine sofortige Lösung zu erhalten.
- Verringern 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 DMLs auflisten
Wir können dann eine Abfrage ausführen, um weitere Informationen zu den zwei am längsten 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 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