O Spanner fornece tabelas integradas que registram estatísticas de operações de leitura, consulta e gravação para as colunas da tabela. Com as estatísticas de operações de coluna, é possível fazer o seguinte:
Identifique colunas com tráfego de leitura, consulta e gravação inesperado.
Identifique colunas muito usadas.
Quando você consulta ou grava em uma coluna, o Spanner incrementa a contagem de operações correspondente em um, independente do número de linhas acessadas.
É possível monitorar o uso geral de um banco de dados com métricas que medem operações por segundo, operações por segundo por método de API e outras métricas relacionadas nos gráficos do System Insights.
Acessar estatísticas de operações de coluna
O Spanner fornece as estatísticas de operações de coluna no esquema SPANNER_SYS
. Você pode usar o seguinte para acessar os dados do SPANNER_SYS
:
A página do Spanner Studio de um banco de dados no console Google Cloud
O comando
gcloud spanner databases execute-sql
O método
executeSql
ouexecuteStreamingSql
.
Os seguintes métodos de leitura única fornecidos pelo Spanner
não são compatíveis com SPANNER_SYS
:
- realizar uma leitura forte de uma única linha ou de várias linhas em uma tabela;
- realizar uma leitura desatualizada de uma única linha ou várias linhas em uma tabela;
- ler uma única linha ou várias linhas em um índice secundário.
Para mais informações, consulte Métodos de leitura única.
Estatísticas de operações de coluna
As tabelas a seguir rastreiam as estatísticas de leitura, consulta e gravação nas 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 uma hora
Essas tabelas têm as seguintes propriedades:
Cada uma contém dados para intervalos de tempo não sobrepostos do comprimento que o nome da tabela específica.
Os intervalos de 1 minuto começam no minuto, os de 10 minutos começam a cada 10 minutos, começando na hora, e os intervalos de 1 hora começam na hora.
Por exemplo, às 11h59m30s, as consultas SQL podem acessar os 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 coluna
Nome da coluna | Tipo | Descrição |
---|---|---|
INTERVAL_END |
TIMESTAMP |
Fim do intervalo de tempo em que as estatísticas de uso da coluna foram coletadas. |
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 da coluna. |
WRITE_COUNT |
INT64 |
Número de consultas que gravam na tabela. |
IS_QUERY_CACHE_MEMORY_CAPPED |
BOOL |
Se a coleta de estatísticas foi limitada devido à pressão na memória. |
Se você inserir dados no banco de dados usando mutações, o Spanner
incrementará o WRITE_COUNT
em 1 para cada tabela acessada pela instrução
de inserção. Além disso, uma consulta que acessa um índice sem verificar a tabela subjacente só incrementa o QUERY_COUNT
no índice.
Retenção de dados
O Spanner mantém dados para cada tabela, no mínimo, pelos períodos a seguir:
SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE
: intervalos que abrangem as seis horas anteriores.SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE
: intervalos abrangendo os quatro dias anteriores.SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR
: intervalos que abrangem os últimos 30 dias.
Exemplo de consultas
Nesta seção, há várias instruções SQL de exemplo que recuperam estatísticas agregadas de operações de coluna. É possível executar essas instruções SQL usando as bibliotecas de cliente ou a Google Cloud CLI.
Consultar as colunas da tabela com mais operações de gravação no 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;
Consultar as colunas com mais operações de consulta no 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 o uso 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;
Em que:
table_name
precisa ser uma tabela ou um índice existente no banco de dados.column_name
precisa 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;
Em que:
table_name
precisa ser uma tabela ou um índice existente no banco de dados.column_name
precisa ser uma coluna existente na tabela.
Consultar o uso 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 no banco 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 no banco de dados.column_name
: nome da coluna na tabela.
A seguir
Saiba mais sobre outras tabelas de estatísticas integradas.
Saiba mais sobre as práticas recomendadas de SQL para o Spanner.