O Spanner fornece tabelas incorporadas que registam estatísticas de operações de leitura, consulta e escrita para as colunas das suas tabelas. Com as estatísticas de operações de colunas, pode fazer o seguinte:
Identifique colunas com tráfego de leitura, consulta e escrita inesperado.
Identifique as colunas mais usadas.
Quando consulta ou escreve numa coluna, o Spanner incrementa a contagem de operações correspondente para essa coluna em um, independentemente do número de linhas acedidas.
Pode monitorizar a utilização geral de uma base de dados através de métricas que medem operações por segundo, operações por segundo por método da API e outras métricas relacionadas nos gráficos Estatísticas do sistema.
Aceda às estatísticas de operações de colunas
O Spanner fornece as estatísticas de operações de colunas no esquema SPANNER_SYS
. Pode usar o seguinte para aceder aos dados do SPANNER_SYS
:
A página do Spanner Studio de uma base de dados na Google Cloud consola
O comando
gcloud spanner databases execute-sql
O método
executeSql
ou o métodoexecuteStreamingSql
.
Os seguintes métodos de leitura única fornecidos pelo Spanner não suportam o SPANNER_SYS
:
- Executar uma leitura forte a partir de uma única linha ou de várias linhas numa tabela.
- Executar uma leitura desatualizada de uma única linha ou várias linhas numa tabela.
- Leitura de uma única linha ou várias linhas num índice secundário.
Para mais informações, consulte o artigo Métodos de leitura única.
Estatísticas de operações de colunas
As tabelas seguintes monitorizam as estatísticas de leitura, consulta e escrita nas suas colunas durante um período específico:
SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE
: operações durante intervalos de 1 minutoSPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE
: operações durante intervalos de 10 minutosSPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR
: operações durante intervalos de 1 hora
Estas tabelas têm as seguintes propriedades:
Cada tabela contém dados para intervalos de tempo não sobrepostos com o comprimento especificado no nome da tabela.
Os intervalos de 1 minuto começam no minuto, os intervalos de 10 minutos começam a cada 10 minutos a partir da hora, e os intervalos de 1 hora começam na hora.
Por exemplo, às 11:59:30, as consultas SQL podem aceder aos seguintes intervalos mais recentes:
- 1 minuto: 11:58:00–11:58:59
- 10 minutos: 11:40:00–11:49:59
- 1 hora: 10:00:00–10:59:59
Esquema para todas as tabelas de estatísticas de operações de colunas
Nome da coluna | Tipo | Descrição |
---|---|---|
INTERVAL_END |
TIMESTAMP |
Fim do intervalo de tempo no qual as estatísticas de utilização das colunas foram recolhidas. |
TABLE_NAME |
STRING |
Nome da tabela ou do índice. |
COLUMN_NAME |
STRING |
Nome da coluna. |
READ_COUNT |
INT64 |
Número de leituras da coluna. |
QUERY_COUNT |
INT64 |
Número de consultas que leem a partir da coluna. |
WRITE_COUNT |
INT64 |
Número de consultas que escrevem na tabela. |
IS_QUERY_CACHE_MEMORY_CAPPED |
BOOL |
Se a recolha de estatísticas foi limitada devido à pressão na memória. |
Se inserir dados na base de dados através de mutações, o Spanner incrementa o WRITE_COUNT
em 1 para cada tabela à qual a declaração de inserção acede. Além disso, uma consulta que acede a um índice sem analisar a tabela subjacente apenas incrementa o QUERY_COUNT
no índice.
Retenção de dados
No mínimo, o Spanner mantém os dados de cada tabela durante os seguintes períodos:
SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE
: intervalos que abrangem as seis horas anteriores.SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE
: intervalos que abrangem os quatro dias anteriores.SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR
: intervalos que abrangem os 30 dias anteriores.
Consultas de exemplo
Esta secção inclui vários exemplos de declarações SQL que obtêm estatísticas de operações de colunas agregadas. Pode executar estas declarações SQL através das bibliotecas de cliente ou da CLI do Google Cloud.
Consultar as colunas da tabela com o maior número de operações de escrita para o intervalo mais 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;
Consulte as colunas com o maior número de operações de consulta para o intervalo mais 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;
Consultar a utilização de uma coluna nas últimas 6 horas
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;
Onde:
table_name
tem de ser uma tabela ou um índice existente na base de dados.column_name
tem de ser uma coluna existente na tabela.
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;
Onde:
table_name
tem de ser uma tabela ou um índice existente na base de dados.column_name
tem de ser uma coluna existente na tabela.
Consulte a utilização de uma coluna nos últimos 14 dias
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;
Faça as seguintes substituições:
table_name
: nome da tabela ou do índice na base de dados.column_name
: nome da coluna na tabela.
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;
Faça as seguintes substituições:
table_name
: nome da tabela ou do índice na base de dados.column_name
: nome da coluna na tabela.
O que se segue?
Saiba mais acerca de outras tabelas de estatísticas incorporadas.
Saiba mais sobre as práticas recomendadas de SQL para o Spanner.