Statistiken zu aktiven partitionierten DMLs

Active partitioned Data Manipulation Language (DML) bietet Echtzeit Fortschritt für die partitionierten DMLs, die derzeit aktiv sind in in Ihrer Datenbank.

Spanner bietet eine integrierte Tabelle, SPANNER_SYS.ACTIVE_PARTITIONED_DMLS, die die ausgeführten partitionierten DMLs enthält und welche Fortschritte sie erzielt haben.

In diesem Artikel wird die Tabelle ausführlich beschrieben. Abfragen erstellen, in denen diese Tabelle verwendet wird. Abfragen, um Probleme zu mindern, die durch aktive partitionierte DMLs verursacht werden.

Verfügbarkeit

SPANNER_SYS-Daten sind nur über SQL-Schnittstellen verfügbar. Beispiel:

Andere von Spanner bereitgestellte Methoden für einzelne Leseaufrufe werden nicht unterstützt SPANNER_SYS

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 dem Client Bibliotheken, die Google Cloud CLI oder die Google Cloud Console:

Am längsten laufende Abfragen auflisten

Die folgende Abfrage gibt eine Liste laufender partitionierter DMLs zurück, sortiert nach dem Startwert Zeitpunkt 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 = \"spannender Veranstaltungsort\" WHERE SingerId < 900.000 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 Sänger 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 > 1.000.000 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 hat Folgendes: Einschränkungen:

  • Die Ergebnisse von PROGRESS, ROWS_PROCESSED und LAST_UPDATE_TIMESTAMP sind an abgeschlossenen Partitionsgrenzen erhöht, sodass die partitionierte DML aktualisiert möglicherweise Zeilen, während die Werte in diesen drei Feldern unverändert bleiben.

  • Wenn eine partitionierte DML Millionen von Partitionen enthält, Die Spalte PROGRESS erfasst möglicherweise nicht den gesamten inkrementellen Fortschritt. Verwenden Sie NUM_PARTITIONS_COMPLETE und NUM_TRIVIAL_PARTITIONS_COMPLETE um einen detaillierten Fortschritt zu beschreiben.

  • Wenn Sie eine partitionierte DML mithilfe einer RPC-Anfrage abbrechen, dass partitionierte DML weiterhin in der Tabelle angezeigt wird. Wenn Sie eine partitionierte DML durch Sitzungslöschungen verwenden, 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 liefern 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. Denken Sie z. B. an das Szenario, in dem die CPU-Leistung die 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 wie folgt vorgehen: Aktion ausführen.

  • 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. Führen Sie 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 2 ältesten laufenden partitionierten DMLs auflisten

Wir können dann eine Abfrage ausführen, um weitere Informationen zu den zwei ältesten zum Ausführen partitionierter DMLs, 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 = \"spannender Veranstaltungsort\" WHERE SingerId < 900.000 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 Sänger 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 führen Sie daher folgenden gcloud spanner databases sessions delete aus: Befehl zum Löschen der Sitzung mithilfe der Sitzungs-ID, mit der die partitionierte DML abgebrochen wird.

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

Nächste Schritte