Estatísticas de operações de colunas

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:

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 minuto
  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE: operações durante intervalos de 10 minutos
  • SPANNER_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?