Active Partitioned Data Manipulation Language (DML) liefert den Fortschritt in Echtzeit für die derzeit in Ihrer Datenbank aktiven partitionierten DMLs.
Spanner bietet die integrierte Tabelle SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
, in der ausgeführte partitionierte DMLs und der jeweilige Fortschritt aufgeführt sind.
In diesem Artikel beschreiben wir die Tabelle im Detail, zeigen einige Beispielabfragen, die diese Tabelle verwenden, und zeigen abschließend, wie Sie mit diesen Abfragen Probleme minimieren, die durch aktive partitionierte DMLs verursacht werden.
Verfügbarkeit
SPANNER_SYS
-Daten sind nur über SQL-Schnittstellen verfügbar, z. B.:
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, sortiert nach ihrer Startzeit.
Tabellenschema
Im Folgenden sehen Sie das Tabellenschema für SPANNER_SYS.ACTIVE_REGIONED_DMLS.
Spaltenname | Typ | Beschreibung |
---|---|---|
TEXT |
STRING |
Der partitionierte Text der DML-Abfrageanweisung. |
TEXT_FINGERPRINT |
INT64 |
Ein Fingerabdruck ist ein Hash des partitionierten DML-Textes. |
SESSION_ID |
STRING |
Die ID der Sitzung, die die partitionierte DML ausführt. 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 die partitionierte DML abgeschlossen hat. |
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, die nach Abschluss jeder Partition aktualisiert wird. |
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. Aktualisiert nach Abschluss einer Partition. |
Beispielabfragen
Sie können die folgenden SQL-Beispielanweisungen 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 der ausgeführten partitionierten 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 Konzerte SET VenueId = \"Atemberaubender \" WHERE SingerId < 900000 | 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 | 27 | 15 | 3 | 50,00 % | 2398654 | 21.01.2024 15:56:30.498744-08:00 | 22.01.2024 15:56:39.049799-08:00 |
UPDATE Singers SET LastName = NULL WHERE LastName = '' | 0028284f-0190-52f9-b396-aa588e034806 | 8 | 4 | 4 | 00,00% | 0 | 22.01.2024 15:55:18.498744-08:00 | 22.01.2024 15:56:28.049799-08:00 |
DELETE aus "Songwriter" WHERE SingerId > 1000000 | 0071a85e-7e5c-576b-8a17-f9bc3d157eea | 8 | 4 | 3 | 20,00% | 238654 | 22.01.2024 15:56:30.498744-08:00 | 22.01.2024 15:56:19.049799-08:00 |
UPDATE dahinter SET MarketingBudget = 1000 WHERE true | 036097a9-91d4-566a-a399-20c754eabdc2 | 8 | 5 | 0 | 62,50% | 238654 | 22.01.2024 15:57:47.498744-08:00 | 22.01.2024 15:57:39.049799-08:00 |
Beschränkungen
Die Verwendung der Tabelle SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
unterliegt folgenden Einschränkungen:
Die Ergebnisse
PROGRESS
,ROWS_PROCESSED
undLAST_UPDATE_TIMESTAMP
werden bei abgeschlossenen Partitionsgrenzen erhöht, sodass die partitionierte DML Zeilen weiterhin 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. Verwenden SieNUM_PARTITIONS_COMPLETE
undNUM_TRIVIAL_PARTITIONS_COMPLETE
, um auf einen detaillierteren Fortschritt zu verweisen.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 durch das Löschen von Sitzungen abbrechen, wird sie sofort aus der Tabelle entfernt. Weitere Informationen finden Sie unter Sitzungs-ID löschen.
Mit aktiv partitionierten DML-Abfragedaten Fehler bei hoher CPU-Auslastung beheben
Abfragestatistiken und Transaktionsstatistiken liefern nützliche Informationen bei der Fehlerbehebung bei 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 diese partitionierten DMLs?
- Wie viele dieser partitionierten DMLs werden lange ausgeführt?
- In welcher Sitzung wird die Abfrage ausgeführt?
Wenn Sie Antworten auf die vorherigen Fragen haben, können Sie Folgendes tun.
- 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 werden aktive partitionierte DMLs untersucht und es wird ermittelt, welche Maßnahmen gegebenenfalls erforderlich sind.
Zusammenfassung aktiver partitionierter DMLs abrufen
In unserem Beispielszenario ist die CPU-Auslastung höher als bei normaler Verwendung. 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 partitionierten DMLs auflisten, die ausgeführt werden
Wir können dann eine Abfrage ausführen, um weitere Informationen über die zwei ältesten ausgeführten 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 Konzerte SET VenueId = \"Atemberaubender \" WHERE SingerId < 900000 | 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 | 27 | 15 | 3 | 50,00 % | 2398654 | 21.01.2024 15:56:30.498744-08:00 | 22.01.2024 15:56:39.049799-08:00 |
UPDATE Singers SET LastName = NULL WHERE LastName = '' | 0028284f-0190-52f9-b396-aa588e034806 | 8 | 4 | 4 | 00,00% | 0 | 22.01.2024 15:55:18.498744-08:00 | 22.01.2024 15:56:28.049799-08:00 |
Teure Abfrage abbrechen
Wir haben eine partitionierte DML gefunden, die seit Tagen ausgeführt wird und keine Fortschritte macht. Sie können dazu den folgenden gcloud spanner databases sessions delete
-Befehl ausführen, um die Sitzung mithilfe der Sitzungs-ID zu löschen. Dadurch wird die partitionierte DML abgebrochen.
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 anderen Informationen, die Spanner für jede Datenbank in den Informationsschematabellen der Datenbank speichert.
- Weitere Informationen zu SQL-Best Practices für Spanner