O tempo de vida (TTL) permite-lhe definir políticas para eliminar periodicamente dados de tabelas do Spanner. Remover dados desnecessários:
- Diminui os custos de armazenamento e cópia de segurança.
- Reduz o número de linhas que a base de dados tem de analisar para algumas consultas, o que pode aumentar o desempenho das consultas.
- Ajuda a cumprir os regulamentos ou as diretrizes da indústria que limitam o tempo de retenção de determinados tipos de dados.
O TTL é ideal para atividades de limpeza regulares. É executado continuamente em segundo plano, eliminando periodicamente os dados elegíveis em lotes. Normalmente, os dados são eliminados no prazo de 72 horas após a data de expiração. Cada eliminação requer uma replicação da chave primária nas réplicas da base de dados, o que gera custos de replicação. Para mais informações, consulte os preços da replicação de dados. O TTL não invalida imediatamente os dados nem os oculta das consultas quando se tornam elegíveis para eliminação. O TTL também não verifica os dados enquanto são inseridos, pelo que não impede a inserção de uma linha com uma data/hora expirada.
O TTL foi concebido para minimizar o impacto noutras cargas de trabalho da base de dados. O processo de limpeza de TTL funciona em segundo plano com prioridade baixa do sistema. Distribui o trabalho ao longo do tempo e os recursos de instâncias disponíveis de forma mais eficiente do que as consultas do utilizador final e inclui uma lógica de repetição para garantir a limpeza integral com uma sobrecarga de processamento mínima.
Outro processo de compactação em segundo plano reclama o armazenamento de linhas eliminadas, normalmente, no prazo de sete dias.
Como funciona o TTL?
Pode definir o TTL em tabelas do Spanner definindo uma política de eliminação de linhas no esquema da base de dados. Esta política permite que o Spanner elimine periodicamente dados desnecessários. As políticas de TTL têm as seguintes características:
- Cada tabela pode ter a sua própria política.
- Só é possível especificar uma política de TTL por tabela.
- Configura o TTL de forma diferente para bases de dados com dialeto GoogleSQL e bases de dados com dialeto PostgreSQL.
- A política de TTL não elimina linhas com a data/hora definida como
NULL
. - Os dados inseridos com datas/horas expiradas são limpos quando detetados no ciclo de eliminação de TTL seguinte.
TTL com GoogleSQL
Com o GoogleSQL, define uma política de eliminação de linhas especificando uma data/hora e um intervalo para determinar quando uma linha é elegível para eliminação; por exemplo, a data da última atualização mais 30 dias.
Um processo do sistema em segundo plano verifica diariamente as linhas elegíveis. Paraleliza as eliminações reais em lotes que são executados perto de onde os dados são armazenados internamente. Cada lote é executado na sua própria transação com uma data/hora consistente. Assim, as linhas num determinado lote, juntamente com quaisquer índices e filhos intercalados, são eliminadas de forma atómica. No entanto, as eliminações em lotes ocorrem em transações diferentes.
Uma vez que se trata de um processo de segundo plano assíncrono, existe um atraso entre a elegibilidade e a eliminação. Normalmente, o atraso é inferior a 72 horas. Como resultado, as linhas podem permanecer na tabela até três dias após o respetivo TTL expirar. Por exemplo, uma tabela com uma política de eliminação de linhas que elimina linhas com mais de quatro dias pode incluir linhas com até sete dias, bem como linhas mais antigas e não elimináveis.
Para ver instruções passo a passo sobre como criar uma política de eliminação de linhas do GoogleSQL, consulte o artigo Crie uma política de TTL.
TTL com PostgreSQL
Com o PostgreSQL, o proprietário de uma base de dados pode usar uma cláusula TTL INTERVAL
na declaração CREATE TABLE
ou ALTER TABLE
para definir uma política de eliminação de linhas.
Para definir uma política de eliminação de linhas numa tabela do PostgreSQL, a tabela tem de ter uma coluna com o tipo de dados TIMESTAMPTZ
. A cláusula TTL INTERVAL
usa esta coluna para definir uma especificação de intervalo para quando uma linha é elegível para eliminação.
A cláusula tem de ser avaliada como um número inteiro de dias. Por exemplo, '3
DAYS'
é permitido, tal como '4 DAYS 2 MINUTES - 2 MINUTES'
, mas '4 DAYS 3
MINUTES'
não é permitido e é devolvido um erro. Não pode usar números negativos.
A recolha de lixo de TTL elimina as linhas elegíveis de forma contínua e em segundo plano. Uma vez que se trata de um processo em segundo plano assíncrono, existe um atraso entre a elegibilidade e a eliminação. A tabela pode conter linhas elegíveis para eliminação por TTL, mas para as quais o TTL ainda não foi concluído. Normalmente, o atraso é inferior a 72 horas.
Para obter instruções sobre como criar uma política de eliminação de linhas do PostgreSQL, consulte o artigo Crie uma política de TTL.
Cópias de segurança e TTL
Restaure uma cópia de segurança
Quando restaura uma base de dados a partir de uma cópia de segurança, todas as políticas de eliminação de linhas que foram configuradas na base de dados de origem são automaticamente removidas. Isto impede que o Spanner elimine potencialmente dados expirados assim que a cópia de segurança for restaurada. Por isso, tem de reconfigurar o TTL manualmente.
Consistência dos dados
Uma cópia de segurança é uma imagem consistente dos seus dados num
determinado momento (version_time
). A cópia de segurança pode conter linhas que
podem ser elegíveis para eliminação por TTL, mas para as quais o TTL ainda não foi concluído.
Da mesma forma, as tarefas de exportação do Dataflow leem a tabela inteira numa data/hora fixa.
Auditorias
O TTL suporta a auditoria das suas eliminações através de streams de alterações.
Os registos de dados de streams de alterações que acompanham as alterações de TTL a uma base de dados têm o campo transaction_tag
definido como RowDeletionPolicy
e o campo is_system_transaction
definido como true
. Os leitores de streams de alterações podem, em seguida, filtrar todos os registos TTL ou todos os registos, exceto os TTL, consoante o respetivo exemplo de utilização. Veja um exemplo de utilização do Beam para filtrar por
etiquetas de transações.
O que se segue?
- Saiba como gerir a retenção de dados com o TTL.
- Saiba mais acerca das métricas e da monitorização de TTL.