Estatísticas das operações de coluna

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:

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 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 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