Time to live (TTL)

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

O time to live (TTL) permite definir políticas para excluir periodicamente os dados das tabelas do Cloud Spanner. Remoção de dados desnecessários:

  • Diminui os custos de armazenamento e backup.
  • Reduz o número de linhas que o banco de dados precisa verificar para algumas consultas, potencialmente aumentando o desempenho da consulta.
  • Ajuda a cumprir os regulamentos ou diretrizes do setor que limitam o tempo de retenção em determinados tipos de dados.

O TTL é ideal para atividades de limpeza regulares. Ele é executado continuamente em segundo plano, excluindo periodicamente dados qualificados em lotes. Normalmente, os dados são excluídos em até 72 horas após a data de validade. O TTL não invalida imediatamente os dados nem os oculta das consultas quando eles se tornam qualificados para exclusão. O TTL também não verifica dados enquanto eles estão inseridos, portanto, não impede que você insira uma linha com um carimbo de data/hora expirado.

O TTL foi projetado para minimizar o impacto em outras atividades do banco de dados. Paraleliza o trabalho com mais eficiência do que as consultas do usuário final e inclui lógica de repetição para garantir a limpeza de ponta a ponta.

Outro processo de compactação de segundo plano recupera o armazenamento de linhas excluídas, normalmente dentro de sete dias.

Como funciona o TTL?

É possível definir o TTL em tabelas do Spanner definindo uma política de exclusão de linha no esquema do banco de dados, o que permite que o Spanner exclua periodicamente dados desnecessários. Cada tabela pode ter sua própria política. Só é possível especificar uma política de TTL por tabela. Você configura o TTL de maneira diferente nos bancos de dados dialetos SQL padrão e do dialeto PostgreSQL.

TTL com SQL padrão do Google

Com o Google SQL, é possível definir uma política de exclusão de linha especificando um carimbo de data/hora e um intervalo para determinar quando uma linha pode ser excluída. Por exemplo, a data da última atualização e mais 30 dias.

Um processo de sistema em segundo plano verifica as linhas qualificadas diariamente. Ele carrega em paralelo as exclusões reais em lotes executados perto de onde os dados são armazenados internamente. Cada lote é executado na própria transação em um carimbo de data/hora consistente. Assim, as linhas em um determinado lote, com todos os índices e filhos intercalados, têm a garantia de serem excluídas atomicamente. No entanto, as exclusões em lotes ocorrem em transações diferentes.

Como esse é um processo assíncrono em segundo plano, há um atraso entre a qualificação e a exclusão. Normalmente, o atraso é inferior a 72 horas. Como resultado, as linhas podem permanecer na tabela por até três dias após a expiração do TTL. Por exemplo, uma tabela com uma política de exclusão de linhas que exclui linhas com mais de quatro dias pode incluir linhas de até sete dias além de linhas mais antigas e ineleváveis.

Para instruções passo a passo sobre como criar uma política de exclusão de linha SQL padrão do Google, consulte Criar uma política de TTL.

TTL com PostgreSQL

Com o PostgreSQL, um proprietário de banco de dados pode usar uma cláusula TTL INTERVAL na instrução CREATE TABLE ou ALTER TABLE para definir uma política de exclusão de linha.

Para definir uma política de exclusão de linha em uma tabela do PostgreSQL, a tabela precisa ter uma coluna com o tipo de dados TIMESTAMPTZ. A cláusula TTL INTERVAL usa essa coluna para definir uma especificação de intervalo para quando uma linha for qualificada para exclusão.

A cláusula precisa ser avaliada como um número inteiro de dias. Por exemplo, '3 DAYS' é permitido, assim como '4 DAYS 2 MINUTES - 2 MINUTES', mas '4 DAYS 3 MINUTES' não é permitido e um erro é retornado. Não é possível usar números negativos.

A coleta de lixo do TTL exclui as linhas qualificadas continuamente e em segundo plano. Como este é um processo em segundo plano assíncrono, há um atraso entre a qualificação e a exclusão. A tabela pode conter linhas que são qualificadas para exclusão de TTL, mas para as quais o TTL ainda não foi concluído. Normalmente, o atraso é menor que 72 horas.

Para instruções sobre como criar uma política de exclusão de linhas do PostgreSQL, consulte Criar uma política de TTL.

Backups e TTL

Restaurar um backup

Quando você restaura um banco de dados de um backup, todas as políticas de exclusão de linha configuradas no banco de dados de origem são descartadas automaticamente. Isso impede que o Spanner exclua dados expirados assim que o backup for restaurado. Portanto, você precisará reconfigurar o TTL manualmente.

Consistência de dados

Um backup é um snapshot consistente dos dados em um momento específico (version_time). O backup pode conter linhas que podem se qualificar para exclusão de TTL, mas para os quais o TTL ainda não foi concluído. Da mesma forma, os jobs de exportação do Dataflow leem a tabela inteira em um carimbo de data/hora fixo.

Auditoria

O TTL é compatível com a auditoria de exclusões por fluxos de alteração. Os registros de dados de streams de alterações que acompanham as alterações de TTL em um banco de dados têm o campo transaction_tag definido como RowDeletionPolicy e o campo is_system_transaction definido como true. Os leitores dos streams de alteração podem filtrar todos os registros TTL ou todos os registros, exceto os TTL, dependendo do caso de uso. Veja um exemplo de como usar o Beam para filtrar por tags de transação.