Spanner fornisce tabelle integrate che registrano le statistiche delle operazioni di lettura, query e scrittura per le colonne delle tabelle. Con le statistiche delle operazioni sulle colonne puoi:
Identificare le colonne con traffico di lettura, query e scrittura imprevisto.
Identificare le colonne utilizzate di frequente.
Quando esegui una query o scrivi in una colonna, Spanner incrementa di uno il conteggio delle operazioni corrispondente per quella colonna, indipendentemente dal numero di righe a cui accedi.
Puoi monitorare un database nel suo complesso utilizzando le metriche che misurano le operazioni al secondo, le operazioni al secondo per metodo API e altre metriche correlate nei grafici di System Insights.
Accedere alle statistiche delle operazioni sulle colonne
Spanner fornisce le statistiche delle operazioni sulle colonne nello schema SPANNER_SYS. Puoi utilizzare quanto segue per accedere ai dati SPANNER_SYS:
La pagina Spanner Studio di un database nella Google Cloud console
Il
gcloud spanner databases execute-sqlcomandoIl metodo
executeSqloexecuteStreamingSql.
I seguenti metodi di lettura singola forniti da Spanner non supportano SPANNER_SYS:
- Esecuzione di una lettura forte 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.
Per ulteriori informazioni, consulta Metodi di lettura singola.
Statistiche delle operazioni sulle colonne
Le seguenti tabelle tengono traccia delle statistiche di lettura, query e scrittura sulle colonne durante un periodo di tempo specifico:
SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE: operazioni durante intervalli di 1 minutoSPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE: operazioni durante intervalli di 10 minutiSPANNER_SYS.COLUMN_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 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, le query SQL possono accedere agli intervalli più recenti seguenti:
- 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 colonne
| Nome colonna | Tipo | Descrizione |
|---|---|---|
INTERVAL_END |
TIMESTAMP |
Fine dell'intervallo di tempo in cui sono state raccolte le statistiche sull'utilizzo delle colonne. |
TABLE_NAME |
STRING |
Nome della tabella o dell'indice. |
COLUMN_NAME |
STRING |
Nome della colonna. |
READ_COUNT |
INT64 |
Numero di letture dalla colonna. |
QUERY_COUNT |
INT64 |
Numero di query che leggono dalla colonna. |
WRITE_COUNT |
INT64 |
Numero di query che scrivono nella tabella. |
IS_QUERY_CACHE_MEMORY_CAPPED |
BOOL |
Indica se la raccolta delle statistiche è stata limitata a causa della pressione della memoria. |
Se inserisci dati nel database utilizzando le mutazioni, Spanner incrementa WRITE_COUNT di 1 per ogni tabella a cui accede l'istruzione di inserimento. Inoltre, una query che accede a un indice senza scansionare la tabella sottostante incrementa solo QUERY_COUNT sull'indice.
Conservazione dei dati
Spanner conserva i dati per ogni tabella per i seguenti periodi di tempo:
SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE: intervalli che coprono le sei ore precedenti.SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE: intervalli che coprono i quattro giorni precedenti.SPANNER_SYS.COLUMN_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 colonne. Puoi eseguire queste istruzioni SQL utilizzando le librerie client o Google Cloud CLI.
Eseguire una query sulle colonne della tabella con il maggior numero di operazioni di scrittura per l'intervallo più recente
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;
Eseguire una query sulle colonne con il maggior numero di operazioni di query per l'intervallo più recente
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;
Eseguire una query sull'utilizzo di una colonna nelle ultime 6 ore
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;
Dove:
table_namedeve essere una tabella o un indice esistente nel database.column_namedeve essere una colonna esistente nella tabella.
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;
Dove:
table_namedeve essere una tabella o un indice esistente nel database.column_namedeve essere una colonna esistente nella tabella.
Eseguire una query sull'utilizzo di una colonna negli ultimi 14 giorni
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;
Esegui le seguenti sostituzioni:
table_name: nome della tabella o dell'indice nel database.column_name: nome della colonna nella tabella.
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;
Esegui le seguenti sostituzioni:
table_name: nome della tabella o dell'indice nel database.column_name: nome della colonna nella tabella.
Passaggi successivi
Scopri di più sulle altre tabelle delle statistiche integrate.
Scopri di più sulle best practice SQL per Spanner.