Tabelas de estatísticas de transação

O Cloud Spanner fornece tabelas integradas que armazenam estatísticas sobre transações. É possível recuperar estatísticas dessas tabelas SPANNER_SYS.TXN_STATS* usando instruções SQL.

Quando usar estatísticas de transação

As estatísticas de transação são úteis ao investigar problemas de desempenho. Por exemplo, é possível verificar se há transações de execução lenta que podem estar afetando o desempenho ou as consultas por segundo (QPS) no banco de dados. Outro cenário é quando os aplicativos cliente estão com alta latência de execução de transação. Analisar estatísticas de transações pode ajudar a descobrir possíveis gargalos, como grandes volumes de atualizações em uma coluna específica, o que pode estar afetando a latência.

Disponibilidade

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.

Estatísticas de latência agrupadas por transação

As tabelas a seguir rastreiam as estatísticas de transações TOP com consumo intensivo de recursos durante um período específico.

  • SPANNER_SYS.TXN_STATS_TOP_MINUTE: estatísticas de transação agregadas em intervalos de 1 minuto.

  • SPANNER_SYS.TXN_STATS_TOP_10MINUTE: estatísticas de transação agregadas em intervalos de 10 minutos.

  • SPANNER_SYS.TXN_STATS_TOP_HOUR: estatísticas de transação agregadas em 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 por FPRINT (impressão digital) das transações. FPRINT é o hash calculado com base nas operações envolvidas na transação.

  • Como as estatísticas são agrupadas com base em FPRINT, se a mesma transação for executada várias vezes em qualquer intervalo de tempo, ainda veremos apenas uma entrada para a transação em questão nessas tabelas.

  • Cada linha contém estatísticas de todas as execuções de uma transação específica para a qual o Cloud Spanner captura estatísticas durante o intervalo especificado.

Se o Cloud Spanner não conseguir armazenar estatísticas para todas as transações executadas durante o intervalo nessas tabelas, o sistema priorizará as transações com a maior latência, tentativas de confirmação e bytes gravados 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 transação incluídas ocorreram.
FPRINT INT64 A impressão digital é o hash calculado com base nas operações envolvidas na transação. INTERVAL_END e FPRINT juntos atuam como uma chave exclusiva para essas tabelas.
READ_COLUMNS ARRAY<STRING> O conjunto de colunas que foram lidas pela transação.
WRITE_CONSTRUCTIVE_COLUMNS ARRAY<STRING> O conjunto de colunas que foram gravadas construtivamente (ou seja, atribuídas a novos valores) pela transação.
WRITE_DELETE_TABLES ARRAY<STRING> O conjunto de tabelas que tiveram linhas excluídas ou substituídas pela transação.
COMMIT_ATTEMPT_COUNT INT64 Número total de tentativas de confirmação na transação.
COMMIT_FAILED_PRECONDITION_COUNT INT64 Número total de falhas de pré-condição (FAILED_PRECONDITION) para a transação.
COMMIT_ABORT_COUNT INT64 Número de vezes que as confirmações foram canceladas para a transação.
AVG_PARTICIPANTS FLOAT64 Número médio de participantes em cada tentativa de confirmação. Para saber mais sobre os participantes, consulte Vida útil das leituras e gravações do Cloud Spanner.
AVG_TOTAL_LATENCY_SECONDS FLOAT64 Média de segundos da primeira operação da transação a ser confirmada/cancelada.
AVG_COMMIT_LATENCY_SECONDS FLOAT64 Média de segundos necessários para executar a operação de confirmação.
AVG_BYTES FLOAT64 Número médio de bytes gravados pela transação.

Consultas de exemplo

Esta seção inclui vários exemplos de instruções SQL que recuperam estatísticas de transação. É possível executar essas instruções SQL usando as bibliotecas de cliente, a ferramenta de linha de comando gcloud ou o Console do Cloud.

Listar as estatísticas básicas de cada transação em um determinado período

A consulta a seguir retorna os dados brutos das principais transações no minuto anterior.

SELECT fprint,
       read_columns,
       write_constructive_columns,
       write_delete_tables,
       avg_total_latency_seconds,
       avg_commit_latency_seconds,
       avg_bytes
FROM spanner_sys.txn_stats_top_minute
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.txn_stats_top_minute);
Saída de consulta
fprint read_columns write_constructive_columns tabelas de gravação avg_total_latency_seconds avg_commit_latency_seconds avg_bytes
40015598317 [] ["Routes"] ["Users"] 0.006578737 0.006547737 25286
20524969030 ["id", "no"] [] [] 0.001732442 0.000247442 0
77848338483 [] [] ["Cars", "Routes"] 0.033467418 0.000251418 0

Listar as transações com a maior latência média de confirmação

A consulta a seguir retorna as transações com alta latência média de confirmação na hora anterior, ordenadas da latência média mais alta para a mais baixa.

SELECT fprint,
       read_columns,
       write_constructive_columns,
       write_delete_tables,
       avg_total_latency_seconds,
       avg_commit_latency_seconds,
       avg_bytes
FROM spanner_sys.txn_stats_top_hour
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.txn_stats_top_hour)
ORDER BY avg_commit_latency_seconds DESC;
Saída de consulta
fprint read_columns write_constructive_columns tabelas de gravação avg_total_latency_seconds avg_commit_latency_seconds avg_bytes
40015598317 [] ["Routes"] ["Users"] 0.006578737 0.006547737 25286
77848338483 [] [] ["Cars", "Routes"] 0.033467418 0.000251418 0
20524969030 ["id", "no"] [] [] 0.001732442 0.000247442 0

Encontrar a latência média de transações que leem determinadas colunas

A consulta a seguir retorna as informações de latência média das transações que leem a coluna ADDRESS das estatísticas de 1 hora:

SELECT fprint,
       read_columns,
       write_constructive_columns,
       write_delete_tables,
       avg_total_latency_seconds
FROM spanner_sys.txn_stats_top_hour
WHERE 'ADDRESS' IN UNNEST(read_columns)
ORDER BY avg_total_latency_seconds DESC;
Saída de consulta
fprint read_columns write_constructive_columns tabelas de gravação avg_total_latency_seconds
77848338483 ["ID", "ADDRESS"] [] ["Cars", "Routes"] 0.033467418
40015598317 ["ID", "NAME", "ADDRESS"] [] ["Users"] 0.006578737

Listar transações pelo número médio de bytes modificados

A consulta a seguir retorna as transações amostradas na última hora, ordenadas pelo número médio de bytes modificados pela transação.

SELECT fprint,
       read_columns,
       write_constructive_columns,
       write_delete_tables,
       avg_bytes
FROM spanner_sys.txn_stats_top_hour
ORDER BY avg_bytes DESC;
Saída de consulta
fprint read_columns write_constructive_columns tabelas de gravação avg_bytes
40015598317 [] [] ["Users"] 25286
77848338483 [] [] ["Cars", "Routes"] 12005
20524969030 ["ID", "ADDRESS"] [] ["Users"] 10923

Estatísticas agregadas

SPANNER_SYS também contém tabelas para armazenar dados agregados de todas as transações para as quais o Cloud Spanner capturou estatísticas em um período específico:

  • SPANNER_SYS.TXN_STATS_TOTAL_MINUTE: agregar estatísticas de todas as transações durante intervalos de um minuto
  • SPANNER_SYS.TXN_STATS_TOTAL_10MINUTE: agregar estatísticas de todas as transações durante intervalos de 10 minutos
  • SPANNER_SYS.TXN_STATS_TOTAL_HOUR: agregar estatísticas de todas as transações durante intervalos de 1 hora

As tabelas de estatísticas agregadas 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 11h59m30s, os intervalos mais recentes disponíveis para consultas SQL em estatísticas de transação agregadas 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 de todas as transações agregadas executadas no banco de dados durante o intervalo especificado. Há apenas uma linha por intervalo de tempo.

  • As estatísticas capturadas nas tabelas SPANNER_SYS.TXN_STATS_TOTAL_* podem incluir transações que o Cloud Spanner não capturou nas tabelas SPANNER_SYS.TXN_STATS_TOP_*.

Esquema de tabela

Nome da coluna Tipo Descrição
INTERVAL_END TIMESTAMP Fim do intervalo de tempo em que essa estatística foi capturada.
COMMIT_ATTEMPT_COUNT INT64 Número total de tentativas de confirmação na transação.
COMMIT_FAILED_PRECONDITION_COUNT INT64 Número total de falhas de pré-condição (FAILED_PRECONDITION) para a transação.
COMMIT_ABORT_COUNT INT64 Número de vezes que as confirmações foram canceladas para a transação.
AVG_PARTICIPANTS FLOAT64 Número médio de participantes em cada tentativa de confirmação. Para saber mais sobre os participantes, consulte Vida útil das leituras e gravações do Cloud Spanner.
AVG_TOTAL_LATENCY_SECONDS FLOAT64 Média de segundos da primeira operação da transação a ser confirmada/cancelada.
AVG_COMMIT_LATENCY_SECONDS FLOAT64 Média de segundos necessários para executar a operação de confirmação.
AVG_BYTES FLOAT64 Número médio de bytes gravados pela transação.

Consultas de exemplo

Esta seção inclui vários exemplos de instruções SQL que recuperam estatísticas de transação. É possível executar essas instruções SQL usando as bibliotecas de cliente, a ferramenta de linha de comando gcloud ou o Console do Cloud.

Encontrar o número total de tentativas de confirmação para uma transação em um determinado período

A consulta a seguir retorna o número total de tentativas de confirmação para todas as transações no intervalo de um minuto completo mais recente:

SELECT interval_end,
       commit_attempt_count
FROM spanner_sys.txn_stats_total_minute
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.txn_stats_total_minute)
ORDER BY interval_end;
Saída de consulta
interval_end commit_attempt_count
2020-01-17 11:46:00-08:00 21

Há apenas uma linha no resultado porque as estatísticas agregadas têm apenas uma entrada por interval_end para qualquer duração.

Encontrar a latência total de confirmação em todas as transações

A consulta a seguir retorna a latência total de confirmação em todas as transações nos últimos 10 minutos:

SELECT (avg_commit_latency_seconds * commit_attempt_count / 60 / 60)
  AS total_commit_latency_hours
FROM spanner_sys.txn_stats_total_10minute
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.txn_stats_total_10minute);
Saída de consulta
total_commit_latency_hours
0.8967

Há apenas uma linha no resultado porque as estatísticas agregadas têm apenas uma entrada por interval_end para qualquer duração.

Retenção de dados

O Cloud Spanner mantém dados para cada tabela, no mínimo, pelos períodos a seguir:

  • SPANNER_SYS.TXN_STATS_TOP_MINUTE e SPANNER_SYS.TXN_STATS_TOTAL_MINUTE: intervalos que abrangem as seis horas anteriores.

  • SPANNER_SYS.TXN_STATS_TOP_10MINUTE e SPANNER_SYS.TXN_STATS_TOTAL_10MINUTE: intervalos abrangendo os quatro dias anteriores.

  • SPANNER_SYS.TXN_STATS_TOP_HOUR e SPANNER_SYS.TXN_STATS_TOTAL_HOUR: intervalos que abrangem os últimos 30 dias.

A seguir