Spanner bietet integrierte Tabellen, in denen Statistiken zu Lese- (oder Abfrage-), Schreib- und Löschvorgängen für Ihre Tabellen (einschließlich Änderungsstreamtabellen) und Indexe aufgezeichnet werden. Mit Statistiken zu Tabellenvorgängen haben Sie folgende Möglichkeiten:
Tabellen mit erhöhtem Schreibtraffic identifizieren, der mit der Speichererhöhung zusammenhängt.
Tabellen mit unerwartetem Lese-, Schreib- und Löschtraffic identifizieren.
Häufig verwendete Tabellen ermitteln
Wenn Sie eine Tabelle abfragen oder in eine Tabelle schreiben, wird die entsprechende Anzahl der Vorgänge für die Tabelle um 1 erhöht, unabhängig von der Anzahl der aufgerufenen Zeilen.
Die Messwerte für die Gesamtanzahl 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.
Statistiken zu Tabellenvorgängen aufrufen
Spanner stellt die Statistiken zu Tabellenvorgä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 Console.
Mit dem Befehl
gcloud spanner databases execute-sql
.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
Statistiken zu Tabellenvorgängen
In den folgenden Tabellen werden die Statistiken für Lese- (oder Abfrage-), Schreib- und Löschvorgänge für Ihre Tabellen und Indexe während eines bestimmten Zeitraums erfasst:
SPANNER_SYS.TABLE_OPERATIONS_STATS_MINUTE
: Vorgänge in Intervallen von 1 MinuteSPANNER_SYS.TABLE_OPERATIONS_STATS_10MINUTE
: Vorgänge in Intervallen von 10 MinutenSPANNER_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 festlegt.
Die Intervalle basieren auf der Uhrzeit. 1-Minuten-Intervalle beginnen nach einer vollen Minute, 10-Minuten-Intervalle beginnen alle 10 Minuten ab Beginn der vollen Stunde, 1-Stunden-Intervalle beginnen zu jeder 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 für Tabellenvorgänge
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 Daten aus der Tabelle lesen. |
WRITE_COUNT |
INT64 |
Anzahl der Abfragen, die in die Tabelle schreiben. |
DELETE_COUNT |
INT64 |
Anzahl der Abfragen, mit denen Löschvorgänge in der Tabelle ausgeführt werden. |
Wenn Sie Daten mithilfe von Mutationen in Ihre Datenbank einfügen, wird write_count
für jede Tabelle, auf die durch die Einfügeanweisung zugegriffen wird, um 1 erhöht. Außerdem wird bei einer Abfrage, die auf einen Index zugreift, ohne die zugrunde liegende Tabelle zu scannen, nur der read_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.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, die zusammengefasste Statistiken zu Tabellenvorgängen abrufen. 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 für das letzte 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 für das letzte 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
GoogleSQL
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 vorhandener Index in der Datenbank sein.
PostgreSQL
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 vorhandener 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 vorhandener Index in der Datenbank sein.
PostgreSQL
SELECT interval_end, read_query_count, write_count, delete_count FROM spanner_sys.table_operations_stats_hour WHERE interval_end > spanner.timestamptz_subtract(now(), '14 DAY') AND table_name = 'table_name' ORDER BY interval_end DESC;
Wobei:
table_name
muss eine vorhandene Tabelle oder ein vorhandener Index in der Datenbank sein.
Tabellen und Indexe abfragen, die in den letzten 24 Stunden nicht verwendet wurden
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
Verwenden Sie die Statistiken zu Tabellengrößen, um die Größen Ihrer Tabellen und Indexe zu ermitteln.
Weitere Informationen zu Tools zur Selbstbeobachtung
SQL-Best-Practices für Spanner