Statistiken zu Spaltenvorgängen

Spanner bietet integrierte Tabellen, in denen Statistiken zu Lese-, Abfrage- und Schreibvorgängen für Ihre Tabellenspalten aufgezeichnet werden. Mit Statistiken zu Spaltenvorgängen haben Sie folgende Möglichkeiten:

  • Spalten mit unerwartetem Lese-, Abfrage- und Schreibzugriff identifizieren.

  • Häufig verwendete Spalten ermitteln

Wenn Sie eine Spalte abfragen oder in eine Spalte schreiben, wird die entsprechende Anzahl der Vorgänge für diese Spalte um eins erhöht, unabhängig von der Anzahl der aufgerufenen Zeilen.

Sie können die Gesamtleistung einer Datenbank anhand von Messwerten überwachen, die Vorgänge pro Sekunde, Vorgänge pro Sekunde nach API-Methode und andere zugehörige Messwerte in Ihren System Insights-Diagrammen messen.

Statistiken zu Spaltenvorgängen aufrufen

Spanner stellt die Statistiken zu Spaltenvorgängen im Schema SPANNER_SYS bereit. Sie haben folgende Möglichkeiten, auf SPANNER_SYS-Daten zuzugreifen:

Die folgenden von Spanner bereitgestellten Einzellesemethoden unterstützen SPANNER_SYS nicht:

  • Starken Lesevorgang aus einer einzelnen Zeile oder mehreren Zeilen in einer Tabelle durchführen
  • Veralteten Lesevorgang aus einer einzelnen Zeile oder mehreren Zeilen in einer Tabelle durchführen
  • Aus einer einzelnen Zeile oder mehreren Zeilen in einem sekundären Index lesen

Weitere Informationen finden Sie unter Methoden für einzelne Lesevorgänge.

Statistiken zu Spaltenvorgängen

In den folgenden Tabellen werden die Statistiken für Lese-, Abfrage- und Schreibvorgänge für Ihre Spalten während eines bestimmten Zeitraums erfasst:

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE: Vorgänge in Intervallen von 1 Minute
  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE: Vorgänge in 10-Minuten-Intervallen
  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR: Vorgänge in 1-Stunden-Intervallen

Diese Tabellen haben folgende Attribute:

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

  • 1-Minuten-Intervalle beginnen nach einer vollen Minute, 10-Minuten-Intervalle beginnen alle 10 Minuten ab Beginn der vollen Stunde und 1-Stunden-Intervalle beginnen zu jeder vollen Stunde.

    Beispielsweise können SQL-Abfragen um 11:59:30 Uhr auf die folgenden neuesten Intervalle zugreifen:

    • 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 für Spaltenvorgänge

Spaltenname Typ Beschreibung
INTERVAL_END TIMESTAMP Ende des Zeitintervalls, in dem die Nutzungsstatistiken für die Spalte erfasst wurden.
TABLE_NAME STRING Name der Tabelle oder des Index.
COLUMN_NAME STRING Name der Spalte.
READ_COUNT INT64 Anzahl der Lesevorgänge aus der Spalte.
QUERY_COUNT INT64 Anzahl der Abfragen, die Daten aus der Spalte lesen.
WRITE_COUNT INT64 Anzahl der Abfragen, die in die Tabelle schreiben.
IS_QUERY_CACHE_MEMORY_CAPPED BOOL Gibt an, ob die Statistikerhebung aufgrund von Speichermangel begrenzt wurde.

Wenn Sie Daten mithilfe von Mutationen in Ihre Datenbank einfügen, erhöht Spanner den Wert von WRITE_COUNT um 1 für jede Tabelle, auf die mit der INSERT-Anweisung zugegriffen wird. Außerdem wird bei einer Abfrage, die auf einen Index zugreift, ohne die zugrunde liegende Tabelle zu scannen, nur der QUERY_COUNT für den Index erhöht.

Datenaufbewahrung

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

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE: Intervalle der letzten sechs Stunden.

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE: Intervalle der letzten vier Tage.

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR: Intervalle der letzten 30 Tage.

Beispielabfragen

Dieser Abschnitt enthält mehrere Beispiel-SQL-Anweisungen, die zusammengefasste Statistiken zu Spaltenvorgängen abrufen. Sie können diese SQL-Anweisungen mit den Clientbibliotheken oder der Google Cloud CLI ausführen.

Tabellenspalten mit den meisten Schreibvorgängen für das letzte Intervall abfragen

GoogleSQL

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

PostgreSQL

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

Spalten mit den meisten Abfragevorgängen für das letzte Intervall abfragen

GoogleSQL

    SELECT interval_end,
          table_name,
          column_name,
          query_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.column_operations_stats_minute)
    ORDER BY query_count DESC;

PostgreSQL

    SELECT interval_end,
          table_name,
          column_name,
          query_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.column_operations_stats_minute)
    ORDER BY query_count DESC;

Nutzung einer Spalte in den letzten 6 Stunden abfragen

GoogleSQL

    SELECT interval_end,
          read_count,
          query_count,
          write_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE table_name = "table_name"
          AND column_name = "column_name"
    ORDER BY interval_end DESC;
    

Wobei:

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

PostgreSQL

    SELECT interval_end,
          read_count,
          query_count,
          write_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE table_name = 'table_name'
          AND column_name = 'column_name'
    ORDER BY interval_end DESC;
    

Wobei:

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

Nutzung einer Spalte in den letzten 14 Tagen abfragen

GoogleSQL

SELECT interval_end,
       read_count,
       query_count,
       write_count
FROM spanner_sys.column_operations_stats_hour
WHERE interval_end > TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -14 DAY)
      AND table_name = "table_name"
      AND column_name = "column_name"
ORDER BY interval_end DESC;

Ersetzen Sie die folgenden Werte:

  • table_name: Tabellen- oder Indexname in der Datenbank.
  • column_name: Spaltenname in der Tabelle.

PostgreSQL

SELECT interval_end,
   read_count,
   query_count,
   write_count
FROM spanner_sys.column_operations_stats_hour
WHERE interval_end > spanner.timestamptz_subtract(now(), '14 DAY')
  AND table_name = 'table_name'
  AND column_name = 'column_name'
ORDER BY interval_end DESC;

Ersetzen Sie die folgenden Werte:

  • table_name: Tabellen- oder Indexname in der Datenbank.
  • column_name: Spaltenname in der Tabelle.

Nächste Schritte