O Spanner fornece tabelas integradas que registram as estatísticas de operações de leitura (ou consulta), gravação e exclusão das tabelas (incluindo tabelas de streams de alterações) e índices. Com as estatísticas de operações de tabela, é possível fazer o seguinte:
Identificar tabelas com aumento do tráfego de gravação correspondente ao aumento do armazenamento.
Identificar tabelas com tráfego inesperado de leitura, gravação e exclusão.
Identificar tabelas muito usadas.
Ao consultar ou gravar em uma tabela, a contagem de operações correspondente para a tabela aumenta em 1, independentemente do número de linhas acessadas.
As métricas gerais de operações por segundo de um banco de dados podem ser monitoradas com
Operations per second, Operations per second by API method, e outras
métricas relacionadas nos gráficos do System Insights.
Acessar estatísticas de operações de tabela
O Spanner fornece as estatísticas de operações de tabela no esquema SPANNER_SYS.É possível usar as seguintes maneiras para acessar dados SPANNER_SYS:
A página do Spanner Studio de um banco de dados no Google Cloud console.
O comando
gcloud spanner databases execute-sql.O
executeSqlou oexecuteStreamingSqlmétodo.
Os seguintes métodos de leitura única fornecidos pelo Spanner não oferecem suporte a 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.
Estatísticas de operações de tabela
As tabelas a seguir rastreiam as estatísticas de leitura (ou consulta), gravação e exclusão nas tabelas e índices durante um período específico:
SPANNER_SYS.TABLE_OPERATIONS_STATS_MINUTE: operações durante intervalos de 1 minutoSPANNER_SYS.TABLE_OPERATIONS_STATS_10MINUTE: operações durante intervalos de 10 minutosSPANNER_SYS.TABLE_OPERATIONS_STATS_HOUR: operações durante intervalos de 1 hora
Essas tabelas têm as seguintes propriedades:
Cada tabela contém dados para intervalos de tempo não sobrepostos do comprimento especificado pelo nome da tabela.
Os intervalos são baseados em horas. 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, os intervalos mais recentes disponíveis para as consultas SQL são:
- 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 tabela
| Nome da coluna | Tipo | Descrição |
|---|---|---|
INTERVAL_END |
TIMESTAMP |
Fim do intervalo de tempo em que os tamanhos da tabela foram coletados. |
TABLE_NAME |
STRING |
Nome da tabela ou do índice. |
READ_QUERY_COUNT |
INT64 |
Número de consultas ou leituras da tabela. |
WRITE_COUNT |
INT64 |
Número de consultas que gravam na tabela. |
DELETE_COUNT |
INT64 |
Número de consultas que realizam exclusões na tabela. |
Se você inserir dados no banco de dados usando mutações, o write_count será incrementado 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 read_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.TABLE_OPERATIONS_STATS_MINUTE: intervalos que abrangem as 6 horas anteriores.SPANNER_SYS.TABLE_OPERATIONS_STATS_10MINUTE: intervalos que abrangem os 4 dias anteriores.SPANNER_SYS.TABLE_OPERATIONS_STATS_HOUR: intervalos que abrangem os 30 dias anteriores.
Exemplo de consultas
Esta seção inclui vários exemplos de instruções SQL que recuperam estatísticas agregadas de operações de tabela. É possível executar essas instruções SQL usando as bibliotecas de cliente ou o gcloud spanner.
Consultar as tabelas e índices com mais operações de gravação para o intervalo mais 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;
Consultar as tabelas e índices com mais operações de exclusão para o intervalo mais 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;
Consultar as tabelas e índices com mais operações de leitura e consulta para o intervalo mais 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;
Consultar o uso de uma tabela nas últimas 6 horas
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;
Em que:
table_nameprecisa ser uma tabela ou índice existente no banco de dados.
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;
Em que:
table_nameprecisa ser uma tabela ou índice existente no banco de dados.
Consultar o uso de uma tabela nos últimos 14 dias
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;
Em que:
table_nameprecisa ser uma tabela ou índice existente no banco de dados.
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;
Em que:
table_nameprecisa ser uma tabela ou índice existente no banco de dados.
Consultar as tabelas e índices sem uso nas últimas 24 horas
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));
A seguir
Use as estatísticas de tamanhos de tabelas para determinar os tamanhos das tabelas e índices.
Saiba mais sobre outras ferramentas de introspecção.
Saiba mais sobre as práticas recomendadas de SQL para o Spanner.