O Cloud Spanner fornece tabelas integradas que mantêm várias estatísticas para as consultas que usaram mais CPU, além de todas as consultas agregadas. O Console do Google Cloud usa os dados nessas tabelas SPANNER_SYS.QUERY_STATS*
para gerar a visualização de estatísticas de consulta, mas também é possível recuperar estatísticas das tabelas usando instruções SQL.
Uso
SPANNER_SYS
os dados estão disponíveis somente por meio de interfaces SQL (por exemplo, executeQuery
e gcloud spanner databases execute-sql
); outros métodos de leitura única fornecidos pelo Cloud Spanner não são compatíveis com SPANNER_SYS
.
Uso de CPU agrupado por consulta
As tabelas a seguir rastreiam as consultas com o maior uso de CPU durante um período específico:
SPANNER_SYS.QUERY_STATS_TOP_MINUTE
: consultas durante intervalos de 1 minutoSPANNER_SYS.QUERY_STATS_TOP_10MINUTE
: consultas em intervalos de 10 minutosSPANNER_SYS.QUERY_STATS_TOP_HOUR
: consultas durante intervalos de 1 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 são baseados em tempos de relógio. Os de 1 minuto terminam no minuto, os de 10 minutos terminam a cada 10 minutos, começando na hora, e os intervalos de 1 hora terminam na hora.
Por exemplo, às 11:59:30, os intervalos mais recentes disponíveis para as consultas SQL são:
- 1 minuto: 11:58:01–11:59:00
- 10 minutos: 11:40:01–11:50:00
- 1 hora: 10:00:01–11:00:00
O Cloud Spanner agrupa as estatísticas pelo texto da consulta SQL. Se uma consulta usa parâmetros de consulta, o Cloud Spanner agrupa todas as execuções dela em uma linha. Se a consulta usar literais de string, o Cloud Spanner agrupará as estatísticas somente se o texto completo da consulta for idêntico. Quando qualquer texto diferir, cada consulta aparecerá como uma linha separada.
Cada linha contém estatísticas para todas as execuções de uma consulta SQL específica para a qual o Cloud Spanner captura estatísticas durante o intervalo especificado.
Se o Cloud Spanner não puder armazenar todas as consultas em execução durante o intervalo, o sistema priorizará aquelas com o maior uso de CPU durante o intervalo especificado.
Esquema de tabela
Nome da coluna | Tipo | Descrição |
---|---|---|
INTERVAL_END |
TIMESTAMP |
Fim do intervalo de tempo em que as execuções de consultas incluídas ocorreram. |
TEXT |
STRING |
Texto de consulta SQL, truncado para aproximadamente 64 KB. |
TEXT_TRUNCATED |
BOOL |
Se o texto da consulta foi truncado ou não. |
TEXT_FINGERPRINT |
INT64 |
Hash do texto da consulta. |
EXECUTION_COUNT |
INT64 |
Número de vezes que o Cloud Spanner viu a consulta durante o intervalo. |
AVG_LATENCY_SECONDS |
FLOAT64 |
Tempo médio, em segundos, para cada execução de consulta no banco de dados. Essa média exclui o tempo de codificação e transmissão do conjunto de resultados e também a sobrecarga. |
AVG_ROWS |
FLOAT64 |
Número médio de linhas que a consulta retornou. |
AVG_BYTES |
FLOAT64 |
Número médio de bytes de dados que a consulta retornou, excluindo a sobrecarga de codificação de transmissão. |
AVG_ROWS_SCANNED |
FLOAT64 |
Número médio de linhas que a consulta verificou, com exceção dos valores excluídos. |
AVG_CPU_SECONDS |
FLOAT64 |
Número médio de segundos de tempo de CPU que o Cloud Spanner gastou em todas as operações para executar a consulta. |
Tabelas para estatísticas agregadas
Há também tabelas que rastreiam dados agregados para todas as consultas para as quais o Cloud Spanner capturou estatísticas em um período específico:
SPANNER_SYS.QUERY_STATS_TOTAL_MINUTE
: consultas durante intervalos de 1 minutoSPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE
: consultas em intervalos de 10 minutosSPANNER_SYS.QUERY_STATS_TOTAL_HOUR
: consultas durante intervalos de 1 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 são baseados em tempos de relógio. Os de 1 minuto terminam no minuto, os de 10 minutos terminam a cada 10 minutos, começando na hora, e os intervalos de 1 hora terminam na hora.
Por exemplo, às 11:59:30, os intervalos mais recentes disponíveis para as consultas SQL são:
- 1 minuto: 11:58:01–11:59:00
- 10 minutos: 11:40:01–11:50:00
- 1 hora: 10:00:01–11:00:00
Cada linha contém estatísticas para todas as consultas executadas no banco de dados durante o intervalo especificado, agregadas juntas. Há apenas uma linha por intervalo de tempo.
As estatísticas capturadas nas tabelas
TOTAL
podem incluir consultas que o Cloud Spanner não capturou nas tabelasTOP
.
Esquema de tabela
Nome da coluna | Tipo | Descrição |
---|---|---|
INTERVAL_END |
TIMESTAMP |
Fim do intervalo de tempo em que as execuções de consultas incluídas ocorreram. |
EXECUTION_COUNT |
INT64 |
Número de vezes que o Cloud Spanner viu a consulta durante o intervalo de tempo. |
AVG_LATENCY_SECONDS |
FLOAT64 |
Tempo médio, em segundos, para cada execução de consulta no banco de dados. Essa média exclui o tempo de codificação e transmissão do conjunto de resultados e também a sobrecarga. |
AVG_ROWS |
FLOAT64 |
Número médio de linhas que a consulta retornou. |
AVG_BYTES |
FLOAT64 |
Número médio de bytes de dados que a consulta retornou, excluindo a sobrecarga de codificação de transmissão. |
AVG_ROWS_SCANNED |
FLOAT64 |
Número médio de linhas que a consulta verificou, com exceção dos valores excluídos. |
AVG_CPU_SECONDS |
FLOAT64 |
Número médio de segundos de tempo de CPU que o Cloud Spanner gastou em todas as operações para executar a consulta. |
Retenção de dados
O Cloud Spanner mantém dados para cada tabela, no mínimo, pelos períodos a seguir:
SPANNER_SYS.QUERY_STATS_TOP_MINUTE
eSPANNER_SYS.QUERY_STATS_TOTAL_MINUTE
: intervalos que abrangem as seis horas anteriores.SPANNER_SYS.QUERY_STATS_TOP_10MINUTE
eSPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE
: intervalos abrangendo os quatro dias anteriores.SPANNER_SYS.QUERY_STATS_TOP_HOUR
eSPANNER_SYS.QUERY_STATS_TOTAL_HOUR
: intervalos que abrangem os últimos 30 dias.
Consultas de exemplo
Nesta seção, há várias instruções SQL de exemplo que recuperam estatísticas de consulta. É possível executar essas instruções SQL usando as bibliotecas de cliente, a ferramenta de linha de comando gcloud
ou o Console do Cloud.
Como listar as estatísticas básicas para cada consulta em um determinado período
A consulta a seguir retorna os dados brutos para as principais consultas no minuto anterior:
SELECT text,
interval_end,
execution_count,
avg_latency_seconds,
avg_rows,
avg_bytes,
avg_rows_scanned,
avg_cpu_seconds
FROM spanner_sys.query_stats_top_minute
ORDER BY interval_end;
Como listar as consultas com o maior uso de CPU
A consulta a seguir retorna as consultas com o maior uso de CPU na hora anterior:
SELECT text,
execution_count AS count,
avg_latency_seconds AS latency,
avg_cpu_seconds AS cpu,
execution_count * avg_cpu_seconds AS total_cpu
FROM spanner_sys.query_stats_top_hour
WHERE interval_end =
(SELECT MAX(interval_end)
FROM spanner_sys.query_stats_top_hour)
ORDER BY total_cpu DESC;
Como encontrar a contagem total de execuções em um determinado período
A consulta a seguir retorna o número total de consultas executadas no intervalo completo de 1 minuto mais recente:
SELECT interval_end,
execution_count
FROM spanner_sys.query_stats_total_minute
WHERE interval_end =
(SELECT MAX(interval_end)
FROM spanner_sys.query_stats_top_minute)
ORDER BY interval_end;
Como encontrar a latência média de uma consulta
A consulta a seguir retorna as informações de latência média de uma consulta específica:
SELECT avg_latency_seconds
FROM spanner_sys.query_stats_top_hour
WHERE text LIKE "SELECT x FROM table WHERE x=@foo;";
Como encontrar as consultas que verificam a maioria dos dados
É possível usar o número de linhas verificadas por uma consulta como uma medida da quantidade de dados que a consulta verificou. A consulta a seguir retorna o número de linhas verificadas por consultas executadas na hora anterior:
SELECT text,
execution_count,
avg_rows_scanned
FROM spanner_sys.query_stats_top_hour
WHERE interval_end =
(SELECT MAX(interval_end)
FROM spanner_sys.query_stats_top_hour)
ORDER BY avg_rows_scanned DESC;
Como totalizar o uso da CPU em todas as consultas
A consulta a seguir retorna o número de horas de CPU usadas na hora anterior:
SELECT (avg_cpu_seconds * execution_count / 60 / 60)
AS total_cpu_hours
FROM spanner_sys.query_stats_total_hour
WHERE interval_end =
(SELECT MAX(interval_end)
FROM spanner_sys.query_stats_total_hour);
A seguir
- Saiba como visualizar estatísticas de consulta no Console do Cloud.
- Saiba mais sobre as estatísticas de transação que coletamos nas tabelas de estatísticas de transação do banco de dados.
- Saiba mais sobre outras informações que o Cloud Spanner armazena para cada banco de dados nas tabelas de esquema de informações do banco de dados.
- Saiba mais sobre as práticas recomendadas de SQL para o Cloud Spanner.