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 Spanner Studio-Seite einer Datenbank in der Google Cloud -Konsole
Die Methode
executeSql
oderexecuteStreamingSql
.
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 MinuteSPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE
: Vorgänge in 10-Minuten-IntervallenSPANNER_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.