Métricas e monitoramento de TTL

Nesta página, abordaremos as métricas de time to live (TTL) do Spanner. Para saber mais, consulte Sobre o TTL.

Métrica

O Spanner fornece informações sobre atividades de TTL em um sistema que pode ser lida com consultas SQL e como métricas acessadas por Cloud Monitoring:

A tabela do sistema informa informações de TTL por tabela para um banco de dados, enquanto o Cloud Monitoring informa as métricas no nível do banco de dados.

Usar uma consulta SQL

O Spanner fornece uma tabela integrada que rastreia informações relacionadas ao TTL. A tabela é denominada SPANNER_SYS.ROW_DELETION_POLICIES e tem o seguinte esquema.

Nome da coluna Tipo Descrição
TABLE_NAME STRING O nome da tabela que contém essa política de TTL.
PROCESSED_WATERMARK TIMESTAMP Esta política foi executada em todas as linhas da tabela no momento. Algumas partições de tabela podem ter sido processadas mais recentemente. Portanto, este carimbo de data/hora representa a partição recém-processada. Normalmente, isso leva até 72 horas.
UNDELETABLE_ROWS INT64 O número de linhas que não podem ser excluídas pela política de TTL. Consulte Linhas não delegáveis para mais detalhes.
MIN_UNDELETABLE_TIMESTAMP TIMESTAMP O carimbo de data/hora mais antigo das linhas não elegíveis que foi observado durante o último ciclo de processamento.

As informações da política de exclusão são retornadas por tabela para seu banco de dados.

É possível consultar esses dados com uma consulta SQL semelhante a esta:

SELECT TABLE_NAME, UNDELETABLE_ROWS
FROM SPANNER_SYS.ROW_DELETION_POLICIES
WHERE UNDELETABLE_ROWS > 0

As tabelas SPANNER_SYS só podem ser acessadas por interfaces SQL. Por exemplo:

  • Página do Spanner Studio no console do Google Cloud
  • O comando gcloud spanner databases execute-sql
  • A API executeQuery

Outros métodos de leitura única que o Spanner fornece não oferecem suporte SPANNER_SYS:

Usar o Cloud Monitoring

O Spanner fornece as seguintes métricas para monitorar a atividade do TTL no nível do banco de dados:

  • row_deletion_policy/deleted_rows é o número de linhas excluídas pela política de TTL.
  • row_deletion_policy/undeletable_rows é o número de linhas que correspondem à exclusão de linha (GoogleSQL) ou à instrução TTL INTERVAL (PostgreSQL), mas que não pode ser excluído. Isso geralmente ocorre porque a linha tinha muitas linhas filhas, fazendo com que a ação exceda o limite limite de transação.
  • row_deletion_policy/processed_watermark_age é o tempo entre agora e o carimbo de data/hora de leitura usado pelo último ciclo bem-sucedido (com ou sem linhas não deletáveis).

Essas métricas estão disponíveis no Cloud Monitoring. e o console do Google Cloud.

Monitoramento

Também é possível monitorar outras atividades de TTL.

Encontrar a última verificação concluída

É possível encontrar o horário do último snapshot em que o Spanner concluiu uma verificação da tabela em busca de linhas expiradas. Para fazer isso como uma consulta SQL:

SELECT PROCESSED_WATERMARK
FROM SPANNER_SYS.ROW_DELETION_POLICIES
WHERE TABLE_NAME = $name

Como alternativa, a métrica row_deletion_policy/process_watermark_age exibe informações semelhantes, mas é expressa como a diferença entre o horário atual e o horário da última verificação. A métrica não é detalhada por tabela, mas representa o tempo de verificação mais antigo das tabelas ativadas para TTL no banco de dados.

As linhas que correspondem a uma política de TTL normalmente são excluídas 72 horas antes da data de validade. Você pode definir um alerta em processed_watermark_age para receber uma notificação se o período exceder 72 horas.

Se processed_watermark_age tiver mais de 72 horas, isso pode indicar que tarefas de prioridade mais alta estão impedindo a execução do TTL. Nesse caso, recomendamos verificar a utilização da CPU e adicionar mais capacidade de computação, se necessário. Se a utilização da CPU estiver dentro do intervalo recomendado, verifique o uso excessivo do ponto de acesso usando o Key Visualizer.

Monitorar linhas excluídas

Para monitorar a atividade de TTL na tabela, gere um gráfico da métrica row_deletion_policy/deleted_rows. Essa métrica mostra o número de linhas excluídas ao longo do tempo.

Se nenhum dado tiver expirado, essa métrica estará vazia.

Monitorar linhas que não podem ser excluídas

Quando o TTL não pode excluir uma linha, o Spanner tenta novamente automaticamente. Se, após a tentativa, a ação de TTL não puder ser processada, o Spanner vai pular a linha e a informará na métrica row_deletion_policy/undeletable_rows_count.

É possível definir um alerta no row_deletion_policy/undeletable_rows_count para ser notificado de uma contagem diferente de zero.

Se você encontrar uma contagem diferente de zero, poderá criar uma consulta para detalhar a contagem por tabela:

SELECT TABLE_NAME, UNDELETABLE_ROWS, MIN_UNDELETABLE_TIMESTAMP
FROM SPANNER_SYS.ROW_DELETION_POLICIES
WHERE UNDELETABLE_ROWS > 0

Para procurar o conteúdo da linha não elegível:

SELECT *
FROM $TABLE_NAME
WHERE $EXPIRE_COL >= $MIN_UNDELETABLE_TIMESTAMP

Geralmente, uma falha na exclusão de linhas se deve a atualizações em cascata para tabelas e índices intercalados, de modo que o tamanho da transação resultante excede os limites de mutação do Spanner. Para resolver o problema, atualize o esquema para adicionar políticas de TTL em tabelas intercaladas separadas.