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
executeSqloderexecuteStreamingSql.
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_namemuss 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_namemuss 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_namemuss 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_namemuss 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