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çãoTTL 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.