Esta página aborda as métricas de tempo de vida (TTL) do Spanner. Para saber mais, consulte o artigo Acerca da TTL.
Métrica
O Spanner fornece informações sobre as atividades de TTL numa tabela do sistema que pode ser lida com consultas SQL e como métricas acedidas através do Cloud Monitoring.
A tabela do sistema comunica informações de TTL por tabela para uma base de dados, enquanto o Cloud Monitoring comunica métricas ao nível da base de dados.
Use uma consulta SQL
O Spanner fornece uma tabela integrada que acompanha as informações relacionadas com o TTL. A tabela tem o nome SPANNER_SYS.ROW_DELETION_POLICIES
e o seguinte esquema.
Nome da coluna | Tipo | Descrição |
---|---|---|
TABLE_NAME | STRING | O nome da tabela que contém esta política de TTL. |
PROCESSED_WATERMARK | TIMESTAMP | Esta política foi executada em todas as linhas da tabela a partir desta hora. Algumas partições de tabelas podem ter sido processadas mais recentemente, pelo que esta data/hora representa a partição processada menos recentemente. Normalmente, este processo demora 72 horas. |
UNDELETABLE_ROWS | INT64 | O número de linhas que não podem ser eliminadas pela política de TTL. Consulte o artigo Linhas não elimináveis para ver mais detalhes. |
MIN_UNDELETABLE_TIMESTAMP | TIMESTAMP | A data/hora mais antiga das linhas não elimináveis observada durante o último ciclo de processamento. |
As informações da política de eliminação são devolvidas por tabela para a sua base de dados.
Pode consultar estes dados com uma consulta SQL semelhante à seguinte:
SELECT TABLE_NAME, UNDELETABLE_ROWS
FROM SPANNER_SYS.ROW_DELETION_POLICIES
WHERE UNDELETABLE_ROWS > 0
As tabelas SPANNER_SYS
só são acessíveis através de interfaces SQL;
por exemplo:
- A página Spanner Studio na Google Cloud consola
- O comando
gcloud spanner databases execute-sql
- A API
executeQuery
Outros métodos de leitura única fornecidos pelo Spanner não são compatíveis com SPANNER_SYS
.
Utilize o Cloud Monitoring
O Spanner fornece as seguintes métricas para monitorizar a atividade de TTL ao nível da base de dados:
row_deletion_policy/deleted_rows
é o número de linhas eliminadas pela política de TTL.row_deletion_policy/undeletable_rows
é o número de linhas que correspondem à declaração de eliminação de linhas (GoogleSQL) ouTTL INTERVAL
(PostgreSQL), mas que não podem ser eliminadas. Normalmente, isto acontece porque a linha tinha demasiadas linhas secundárias, o que fez com que a ação excedesse o limite de transações do Spanner.row_deletion_policy/processed_watermark_age
é o tempo entre agora e a data/hora de leitura usada pelo último ciclo bem-sucedido (com ou sem linhas não elimináveis).
Estas métricas estão disponíveis através do Cloud Monitoring e da Google Cloud consola.
Monitor
Também pode monitorizar outras atividades de TTL.
Encontre a última análise bem-sucedida
Pode encontrar a hora da última captura de ecrã em que o Spanner concluiu uma análise da tabela à procura de linhas expiradas. Para o fazer como uma consulta SQL:
SELECT PROCESSED_WATERMARK
FROM SPANNER_SYS.ROW_DELETION_POLICIES
WHERE TABLE_NAME = $name
Em alternativa, a métrica row_deletion_policy/process_watermark_age
apresenta informações semelhantes, mas é expressa como a diferença entre a hora atual e a hora da última análise. A métrica não é discriminada por tabela, mas representa o tempo de leitura mais antigo de quaisquer tabelas com TTL ativado na base de dados.
Normalmente, as linhas que correspondem a uma política de TTL são eliminadas no prazo de 72 horas após a data de validade. Pode definir um alerta no
processed_watermark_age
para receber uma notificação se exceder as 72 horas.
Se processed_watermark_age
tiver mais de 72 horas, pode indicar que as tarefas de prioridade mais elevada estão a impedir a execução do TTL. Neste caso, recomendamos que verifique a utilização da CPU e adicione mais capacidade de computação, se necessário. Se a utilização da CPU estiver dentro do intervalo recomendado, verifique a existência de pontos críticos através do Key Visualizer.
Monitorize linhas eliminadas
Para monitorizar a atividade de TTL na sua tabela, represente graficamente a métrica row_deletion_policy/deleted_rows
. Esta métrica apresenta o número de linhas eliminadas ao longo do tempo.
Se nenhum dado tiver expirado, esta métrica está vazia.
Monitorize linhas não elimináveis
Quando o TTL não consegue eliminar uma linha, o Spanner tenta novamente automaticamente.
Se, após nova tentativa, não for possível processar a ação de TTL, o Spanner ignora a linha e comunica-a na métrica row_deletion_policy/undeletable_rows_count
.
Pode definir um alerta no
row_deletion_policy/undeletable_rows_count
para receber uma notificação quando o número for diferente de zero.
Se encontrar uma contagem diferente de zero, pode criar uma consulta para discriminar 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 eliminável:
SELECT *
FROM $TABLE_NAME
WHERE $EXPIRE_COL >= $MIN_UNDELETABLE_TIMESTAMP
Normalmente, uma falha na eliminação de linhas deve-se a atualizações em cascata de tabelas e índices intercalados, de modo que o tamanho da transação resultante excede os limites de mutação do Spanner. Pode resolver o problema atualizando o seu esquema para adicionar políticas de TTL separadas em tabelas intercaladas.