Estatísticas de operações de tabelas

O Spanner fornece tabelas incorporadas que registam as estatísticas de operações de leitura (ou consulta), escrita e eliminação para as suas tabelas (incluindo tabelas de streams de alterações) e índices. Com as estatísticas de operações de tabelas, pode fazer o seguinte:

  • Identifique tabelas com um aumento do tráfego de escrita correspondente ao aumento do armazenamento.

  • Identifique tabelas com tráfego de leitura, escrita e eliminação inesperado.

  • Identifique tabelas muito usadas.

Quando consulta ou escreve numa tabela, a contagem de operações correspondente para a tabela aumenta em 1, independentemente do número de linhas acedidas.

As métricas gerais de operações por segundo de uma base de dados podem ser monitorizadas com Operations per second, Operations per second by API method e outras métricas relacionadas nos gráficos Estatísticas do sistema.

Aceda às estatísticas de operações de tabelas

O Spanner fornece as estatísticas de operações de tabelas no esquema SPANNER_SYS.Pode usar as seguintes formas para aceder aos dados 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étodo executeStreamingSql.

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.

Estatísticas de operações de tabelas

As tabelas seguintes monitorizam as estatísticas de leitura (ou consulta), escrita e eliminação nas suas tabelas e índices durante um período específico:

  • SPANNER_SYS.TABLE_OPERATIONS_STATS_MINUTE: operações durante intervalos de 1 minuto
  • SPANNER_SYS.TABLE_OPERATIONS_STATS_10MINUTE: Operações durante intervalos de 10 minutos
  • SPANNER_SYS.TABLE_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 baseiam-se nas horas do relógio. 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 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 tabelas

Nome da coluna Tipo Descrição
INTERVAL_END TIMESTAMP Fim do intervalo de tempo em que os tamanhos das tabelas foram recolhidos.
TABLE_NAME STRING Nome da tabela ou do índice.
READ_QUERY_COUNT INT64 Número de consultas ou leituras que leem a partir da tabela.
WRITE_COUNT INT64 Número de consultas que escrevem na tabela.
DELETE_COUNT INT64 Número de consultas que executam eliminações na tabela.

Se inserir dados na sua base de dados através de mutações, o valor de write_countaumenta em 1 para cada tabela acedida pela declaração de inserção. Além disso, uma consulta que acede a um índice, sem analisar a tabela subjacente, apenas incrementa o read_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.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.

Consultas de exemplo

Esta secção inclui vários exemplos de declarações SQL que obtêm estatísticas de operações de tabelas agregadas. Pode executar estas declarações SQL através das bibliotecas de cliente ou do gcloud spanner.

Consulte as tabelas e os índices com o maior número de operações de escrita 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;
  

Consulte as tabelas e os índices com o maior número de operações de eliminação no 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 os índices com o maior número de 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 a utilização 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;
    

Onde:

  • table_name tem de ser uma tabela ou um índice existente na base 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;
    

Onde:

  • table_name tem de ser uma tabela ou um índice existente na base de dados.

Consultar a utilização 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;

Onde:

  • table_name tem de ser uma tabela ou um índice existente na base 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;

Onde:

  • table_name tem de ser uma tabela ou um índice existente na base de dados.

Consulte as tabelas e os índices sem utilização 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));

O que se segue?