Aktive partitionierte Datenbearbeitungssprache (DML) liefert den Echtzeitfortschritt für die partitionierten DMLs, die derzeit in Ihrer Datenbank aktiv sind.
Spanner bietet die integrierte Tabelle SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
, in der die ausgeführten partitionierten DMLs und deren Fortschritt aufgeführt sind.
In diesem Artikel wird die Tabelle ausführlich beschrieben, einige Beispielabfragen gezeigt, die diese Tabelle verwenden, und schließlich veranschaulichen, wie Sie mit diesen Abfragen Probleme beheben können, die durch aktive partitionierte DMLs verursacht werden.
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 Methoden für einzelne Leseaufrufe unterstützen SPANNER_SYS
nicht.
ACTIVE_PARTITIONED_DMLS
SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
gibt eine Liste aktiver partitionierter DMLs zurück, die nach ihrer Startzeit sortiert sind.
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-Textes. |
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, die durch die partitionierte DML abgeschlossen wurden. |
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 die Anzahl der abgeschlossenen nicht-trivialen Partitionen geteilt durch die Gesamtzahl der nicht-trivialen Partitionen berechnet. |
ROWS_PROCESSED |
INT64 |
Die Anzahl der bisher verarbeiteten Zeilen. Sie wird nach Abschluss jeder Partition aktualisiert. |
START_TIMESTAMP . |
TIMESTAMP |
Eine Obergrenze für die Startzeit einer partitionierten DML. |
LAST_UPDATE_TIMESTAMP |
TIMESTAMP |
Letzter Zeitstempel für den Fortschritt der partitionierten DML. Wird aktualisiert, nachdem eine Partition abgeschlossen wurde. |
Beispielabfragen
Sie können die folgenden Beispiel-SQL-Anweisungen mit den Clientbibliotheken, der Google Cloud CLI oder der Google Cloud Console ausführen.
Am längsten laufende Abfragen auflisten
Die folgende Abfrage gibt eine Liste laufender partitionierter DMLs zurück, sortiert nach der Startzeit der Abfrage.
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 = \"hervorragender Veranstaltungsort\" 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 |
LÖSCHEN aus Sänger 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 |
AKTUALISIERUNG SUCHEN 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
unterliegt den folgenden Einschränkungen:
Die Ergebnisse
PROGRESS
,ROWS_PROCESSED
undLAST_UPDATE_TIMESTAMP
werden bei abgeschlossenen Partitionsgrenzen inkrementiert, sodass die partitionierte DML möglicherweise Zeilen aktualisiert, während die Werte in diesen drei Feldern gleich bleiben.Wenn eine partitionierte DML Millionen von Partitionen enthält, erfasst der Wert in der Spalte
PROGRESS
möglicherweise nicht den gesamten inkrementellen Fortschritt. MitNUM_PARTITIONS_COMPLETE
undNUM_TRIVIAL_PARTITIONS_COMPLETE
können Sie einen detaillierteren Fortschritt angeben.Wenn Sie eine partitionierte DML mithilfe einer RPC-Anfrage abbrechen, wird die abgebrochene partitionierte DML möglicherweise noch in der Tabelle angezeigt. Wenn Sie eine partitionierte DML durch das Löschen von Sitzungen abbrechen, wird sie sofort aus der Tabelle entfernt. Weitere Informationen finden Sie unter Sitzungs-ID löschen.
Verwenden Sie aktive partitionierte DML-Abfragedaten, um Fehler bei hoher CPU-Auslastung zu beheben
Abfragestatistiken und Transaktionsstatistiken bieten nützliche Informationen für die Fehlerbehebung bei der Latenz in einer Spanner-Datenbank. Diese Tools bieten Informationen zu bereits abgeschlossen Abfragen. Manchmal ist es jedoch erforderlich zu wissen, was im System ausgeführt wird. Stellen Sie sich beispielsweise ein Szenario vor, in dem die CPU-Auslastung hoch ist und Sie die folgenden Fragen beantworten möchten.
- Wie viele partitionierte DMLs werden derzeit ausgeführt?
- Was sind partitionierte DMLs?
- Wie viele dieser partitionierten DMLs werden lange Zeit ausgeführt?
- In welcher Sitzung wird die Abfrage ausgeführt?
Wenn Sie Antworten auf die vorhergehenden Fragen haben, können Sie sich für die folgende Aktion entscheiden.
- 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 entscheiden, welche Aktion gegebenenfalls ausgeführt werden soll.
Zusammenfassung aktiver partitionierter DMLs abrufen
In unserem Beispielszenario stellen wir eine höhere CPU-Auslastung als normal fest. Daher beschließen wir, die folgende Abfrage auszuführen, 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 2 ältesten laufenden partitionierten DMLs auflisten
Anschließend können wir eine Abfrage ausführen, um weitere Informationen zu den zwei ältesten partitionierten DMLs zu finden, die nach der Startzeit der partitionierten DML sortiert sind.
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 = \"hervorragender Veranstaltungsort\" 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 Abfrage abbrechen
Es wurde eine partitionierte DML gefunden, die seit Tagen ausgeführt wird und keine Fortschritte erzielt. Wir können daher den folgenden gcloud spanner databases sessions delete
-Befehl ausführen, um die Sitzung mithilfe der Sitzungs-ID zu löschen, wodurch die partitionierte DML abgebrochen wird.
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, die Spanner für jede Datenbank in den Informationsschematabellen der Datenbank speichert.
- Weitere Informationen zu Best Practices für SQL für Spanner.