Statistiken zu Tabellenvorgängen

Spanner bietet integrierte Tabellen, in denen die Statistiken der Lese- (oder Abfrage-), Schreib- und Löschvorgänge für Ihre Tabellen (einschließlich Änderungsstreamtabellen) und Indexe aufgezeichnet werden. Mit Statistiken zu Tabellenvorgängen können Sie Folgendes tun:

  • Identifizieren Sie Tabellen mit erhöhtem Schreibtraffic, der einer Speichererweiterung entspricht.

  • Identifizieren Sie Tabellen mit unerwartetem Lese-, Schreib- und Löschtraffic.

  • Stark verwendete Tabellen identifizieren.

Wenn Sie eine Tabelle abfragen oder schreiben, wird die Anzahl der entsprechenden Vorgänge für die Tabelle unabhängig von der Anzahl der aufgerufenen Zeilen um 1 erhöht.

Die Gesamtmesswerte der Vorgänge pro Sekunde einer Datenbank können mit Operations per second, Operations per second by API method und anderen zugehörigen Messwerten in Ihren System Insights-Diagrammen überwacht werden.

Verfügbarkeit

Spanner stellt die Statistiken für Tabellenvorgänge im SPANNER_SYS-Schema bereit. SPANNER_SYS-Daten sind nur über SQL-Schnittstellen verfügbar. Beispiel:

  • Die Spanner Studio-Seite einer Datenbank in der Google Cloud Console

  • Befehl gcloud spanner databases execute-sql

  • Mit der executeQuery API

Andere von Spanner bereitgestellte Methoden für einzelne Leseaufrufe unterstützen SPANNER_SYS nicht.

Statistiken zu Tabellenvorgängen

Die folgenden Tabellen verfolgen die Lese- (oder Abfrage-), Schreib- und Löschstatistiken zu Ihren Tabellen und Indexen während eines bestimmten Zeitraums:

  • SPANNER_SYS.TABLE_OPERATIONS_STATS_MINUTE: Vorgänge in Intervallen von 1 Minute
  • SPANNER_SYS.TABLE_OPERATIONS_STATS_10MINUTE: Vorgänge in Intervallen von 10 Minuten
  • SPANNER_SYS.TABLE_OPERATIONS_STATS_HOUR: Vorgänge in Intervallen von 1 Stunde

Diese Tabellen haben folgende Attribute:

  • Jede Tabelle enthält Daten für nicht überlappende Zeitintervalle in der Länge, die der Tabellenname angibt.

  • Die Intervalle basieren auf der Uhrzeit. 1-Minuten-Intervalle beginnen minutengenau, 10-Minuten-Intervalle beginnen alle 10 Minuten ab der vollen Stunde und 1-Stunden-Intervalle beginnen zur vollen Stunde.

    Beispielsweise sind die neuesten, für SQL-Abfragen verfügbaren Intervalle um 11:59:30 Uhr:

    • 1 Minute: 11:58:00–11:58:59 Uhr
    • 10 Minuten: 11:40:00–11:49:59 Uhr
    • 1 Stunde: 10:00:00–10:59:59 Uhr

Schema für alle Statistiktabellen zu Tabellenvorgängen

Spaltenname Typ Beschreibung
INTERVAL_END TIMESTAMP Ende des Zeitintervalls, in dem die Tabellengrößen erfasst wurden.
TABLE_NAME STRING Name der Tabelle oder des Index.
READ_QUERY_COUNT INT64 Anzahl der Abfragen oder Lesevorgänge, die aus der Tabelle gelesen werden.
WRITE_COUNT INT64 Anzahl der Abfragen, die in die Tabelle geschrieben wurden.
DELETE_COUNT INT64 Anzahl der Abfragen, bei denen Löschvorgänge für die Tabelle durchgeführt werden.

Wenn Sie Daten mithilfe von Mutationen in Ihre Datenbank einfügen, erhöht sich write_count für jede Tabelle, auf die durch die Insert-Anweisung zugegriffen wird, um 1. Darüber hinaus erhöht eine Abfrage, die auf einen Index zugreift, ohne die zugrunde liegende Tabelle zu scannen, nur den read_query_count für den Index.

Datenaufbewahrung

Spanner speichert die Daten für jede Tabelle mindestens für die folgenden Zeiträume:

  • SPANNER_SYS.TABLE_OPERATIONS_STATS_MINUTE: Intervalle der letzten 6 Stunden.

  • SPANNER_SYS.TABLE_OPERATIONS_STATS_10MINUTE: Intervalle der letzten 4 Tage.

  • SPANNER_SYS.TABLE_OPERATIONS_STATS_HOUR: Intervalle der letzten 30 Tage.

Beispielabfragen

Dieser Abschnitt enthält mehrere Beispiel-SQL-Anweisungen, mit denen statistische Daten zu zusammengefassten Tabellenvorgängen abgerufen werden. Sie können diese SQL-Anweisungen mit den Clientbibliotheken oder mit gcloud spanner ausführen.

Tabellen und Indexe mit den meisten Schreibvorgängen für das letzte Intervall abfragen

    SELECT interval_end,
          table_name,
          write_count
    FROM spanner_sys.table_operations_stats_minute
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.table_operations_stats_minute)
    ORDER BY write_count DESC;
  

Tabellen und Indexe mit den meisten Löschvorgängen im letzten Intervall abfragen

    SELECT interval_end,
          table_name,
          delete_count
    FROM spanner_sys.table_operations_stats_minute
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.table_operations_stats_minute)
    ORDER BY delete_count DESC;
  

Tabellen und Indexe mit den meisten Lese- und Abfragevorgängen im letzten Intervall abfragen

    SELECT interval_end,
          table_name,
          read_query_count
    FROM spanner_sys.table_operations_stats_minute
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.table_operations_stats_minute)
    ORDER BY read_query_count DESC;
  

Nutzung einer Tabelle in den letzten 6 Stunden abfragen

    SELECT interval_end,
           read_query_count,
           write_count,
           delete_count
    FROM spanner_sys.table_operations_stats_minute
    WHERE table_name = table_name
    ORDER BY interval_end DESC;
    

Wobei:

  • table_name muss eine vorhandene Tabelle oder ein Index in der Datenbank sein.

Nutzung einer Tabelle in den letzten 14 Tagen abfragen

GoogleSQL

SELECT interval_end,
       read_query_count,
       write_count,
       delete_count
FROM spanner_sys.table_operations_stats_hour
WHERE interval_end > TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -14 DAY)
      AND table_name = table_name
ORDER BY interval_end DESC;

Wobei:

  • table_name muss eine vorhandene Tabelle oder ein Index in der Datenbank sein.

Tabellen und Indexe ohne Verwendung in den letzten 24 Stunden abfragen

GoogleSQL

(SELECT t.table_name
 FROM  information_schema.tables AS t
 WHERE t.table_catalog = ""
   AND t.table_schema = ""
   AND t.table_type = "BASE TABLE"
 UNION ALL
 SELECT cs.change_stream_name
 FROM information_schema.change_streams cs
 WHERE cs.change_stream_catalog = ""
   AND cs.change_stream_schema = ""
 UNION ALL
 SELECT idx.index_name
 FROM information_schema.indexes idx
 WHERE idx.index_type = "INDEX"
   AND idx.table_catalog = ""
   AND idx.table_schema = "")
 EXCEPT ALL
(SELECT  DISTINCT(table_name)
 FROM spanner_sys.table_operations_stats_hour
 WHERE interval_end > TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -24 HOUR));

Nächste Schritte