Spanner fornisce tabelle integrate che registrano le statistiche delle operazioni di lettura (o query), scrittura ed eliminazione per le tabelle (incluse le tabelle dei flussi di modifiche) e gli indici. Con le statistiche delle operazioni sulle tabelle puoi:
Identificare le tabelle con un aumento del traffico di scrittura corrispondente all'aumento dello spazio di archiviazione.
Identificare le tabelle con traffico di lettura, scrittura ed eliminazione imprevisto.
Identificare le tabelle più utilizzate.
Quando esegui una query o scrivi in una tabella, il conteggio delle operazioni corrispondente per la tabella aumenta di 1, indipendentemente dal numero di righe a cui accedi.
Le metriche complessive delle operazioni al secondo di un database possono essere monitorate con
Operations per second, Operations per second by API method, e altre
metriche correlate nei grafici di System Insights.
Accedere alle statistiche delle operazioni sulle tabelle
Spanner fornisce le statistiche delle operazioni sulle tabelle nello schema SPANNER_SYS.Puoi utilizzare i seguenti modi per accedere ai dati SPANNER_SYS:
La pagina Spanner Studio di un database nella Google Cloud console.
Il comando
gcloud spanner databases execute-sql.Il metodo
executeSqloexecuteStreamingSql.
I seguenti metodi di lettura singola forniti da Spanner non supportano SPANNER_SYS:
- Esecuzione di una lettura coerente da una o più righe di una tabella.
- Esecuzione di una lettura obsoleta da una o più righe di una tabella.
- Lettura da una o più righe di un indice secondario.
Statistiche delle operazioni sulle tabelle
Le seguenti tabelle tengono traccia delle statistiche di lettura (o query), scrittura ed eliminazione sulle tabelle e sugli indici durante un periodo di tempo specifico:
SPANNER_SYS.TABLE_OPERATIONS_STATS_MINUTE: operazioni durante intervalli di 1 minutoSPANNER_SYS.TABLE_OPERATIONS_STATS_10MINUTE: operazioni durante intervalli di 10 minutiSPANNER_SYS.TABLE_OPERATIONS_STATS_HOUR: operazioni durante intervalli di 1 ora
Queste tabelle hanno le seguenti proprietà:
Ogni tabella contiene dati per intervalli di tempo non sovrapposti della lunghezza specificata dal nome della tabella.
Gli intervalli si basano sugli orari. Gli intervalli di 1 minuto iniziano al minuto, gli intervalli di 10 minuti iniziano ogni 10 minuti a partire dall'ora e gli intervalli di 1 ora iniziano all'ora.
Ad esempio, alle 11:59:30, gli intervalli più recenti disponibili per le query SQL sono:
- 1 minuto: 11:58:00-11:58:59
- 10 minuti: 11:40:00-11:49:59
- 1 ora: 10:00:00-10:59:59
Schema per tutte le tabelle delle statistiche delle operazioni sulle tabelle
| Nome colonna | Tipo | Descrizione |
|---|---|---|
INTERVAL_END |
TIMESTAMP |
Fine dell'intervallo di tempo in cui sono state raccolte le dimensioni delle tabelle. |
TABLE_NAME |
STRING |
Nome della tabella o dell'indice. |
READ_QUERY_COUNT |
INT64 |
Numero di query o letture dalla tabella. |
WRITE_COUNT |
INT64 |
Numero di query che scrivono nella tabella. |
DELETE_COUNT |
INT64 |
Numero di query che eseguono eliminazioni nella tabella. |
Se inserisci dati nel database utilizzando le mutazioni, write_count aumenta di 1 per ogni tabella a cui accede l'istruzione insert. Inoltre, una query che accede a un indice, senza eseguire la scansione della tabella sottostante, incrementa solo read_query_count nell'indice.
Conservazione dei dati
Spanner conserva i dati per ogni tabella per i seguenti periodi di tempo:
SPANNER_SYS.TABLE_OPERATIONS_STATS_MINUTE: intervalli che coprono le 6 ore precedenti.SPANNER_SYS.TABLE_OPERATIONS_STATS_10MINUTE: intervalli che coprono i 4 giorni precedenti.SPANNER_SYS.TABLE_OPERATIONS_STATS_HOUR: intervalli che coprono i 30 giorni precedenti.
Esempi di query
Questa sezione include diversi esempi di istruzioni SQL che recuperano le statistiche aggregate delle operazioni sulle tabelle. Puoi eseguire queste istruzioni SQL utilizzando le librerie client o gcloud spanner.
Eseguire una query sulle tabelle e sugli indici con il maggior numero di operazioni di scrittura per l'intervallo più recente
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;
Eseguire una query sulle tabelle e sugli indici con il maggior numero di operazioni di eliminazione per l'intervallo più recente
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;
Eseguire una query sulle tabelle e sugli indici con il maggior numero di operazioni di lettura e query per l'intervallo più recente
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;
Eseguire una query sull'utilizzo di una tabella nelle ultime 6 ore
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;
Dove:
table_namedeve essere una tabella o un indice esistente nel database.
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;
Dove:
table_namedeve essere una tabella o un indice esistente nel database.
Eseguire una query sull'utilizzo di una tabella negli ultimi 14 giorni
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;
Dove:
table_namedeve essere una tabella o un indice esistente nel database.
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;
Dove:
table_namedeve essere una tabella o un indice esistente nel database.
Eseguire una query sulle tabelle e sugli indici senza utilizzo nelle ultime 24 ore
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));
Passaggi successivi
Utilizza le statistiche sulle dimensioni delle tabelle per determinare le dimensioni delle tabelle e degli indici.
Scopri di più sugli altri strumenti di introspezione.
Scopri di più sulle best practice SQL per Spanner.