Gerenciar dados históricos com a política de retenção
Importante
O SQL do Azure no Edge será desativado em 30 de setembro de 2025. Para obter mais informações e opções de migração, veja o Aviso de aposentadoria.
Observação
O SQL do Azure no Edge encerrou o suporte à plataforma ARM64.
Depois que a política de retenção de dados é definida para um banco de dados e a tabela subjacente, uma tarefa de temporizador em segundo plano é executada para remover todos os registros obsoletos da tabela habilitada para retenção de dados. A identificação de linhas correspondentes e sua remoção da tabela ocorrem de forma transparente, na tarefa em segundo plano agendada e executada pelo sistema. A condição de idade das linhas da tabela é verificada com base na coluna filter_column
especificada na definição da tabela. Se o período de retenção for definido como uma semana, por exemplo, as linhas de tabela qualificadas para limpeza atenderão a qualquer uma das seguintes condições:
- Se a coluna de filtro usar o tipo de dados DATETIMEOFFSET, a condição será
filter_column < DATEADD(WEEK, -1, SYSUTCDATETIME())
- Caso contrário, a condição será
filter_column < DATEADD(WEEK, -1, SYSDATETIME())
Fases de limpeza da retenção de dados
A operação de limpeza de retenção de dados consiste em duas fases:
- Descoberta: nesta fase, a operação de limpeza identifica todas as tabelas dentro dos bancos de dados de usuário para criar uma lista para limpeza. A descoberta é executada uma vez por dia.
- Limpeza: nesta fase, a limpeza é executada em todas as tabelas com retenção de dados finitos, identificada na fase de descoberta. Se a operação de limpeza não puder ser executada em uma tabela, essa tabela será ignorada na execução atual e será repetida na próxima iteração. Os seguintes princípios são usados durante a limpeza:
- Se uma linha obsoleta estiver bloqueada por outra transação, essa linha será ignorada.
- A limpeza é executada com um tempo limite de bloqueio padrão de 5 segundos. Se os bloqueios não puderem ser adquiridos nas tabelas dentro da janela de tempo limite, a tabela será ignorada na execução atual e será repetida na próxima iteração.
- Se houver um erro durante a limpeza de uma tabela, essa tabela será ignorada e será recolhida na próxima iteração.
Limpeza manual
Dependendo das configurações de retenção de dados em uma tabela e da natureza da carga de trabalho no banco de dados, é possível que o thread de limpeza automática não remova completamente todas as linhas obsoletas durante a execução. Para permitir que os usuários removam manualmente linhas obsoletas, o procedimento armazenado sys.sp_cleanup_data_retention
foi introduzido no SQL do Azure no Edge.
Este procedimento armazenado usa três parâmetros:
@schema_name
: nome do esquema proprietário da tabela. Obrigatória.@table_name
: nome da tabela para a qual a limpeza manual está sendo executada. Obrigatória.@rowcount
: variável de saída. Retorna o número de linhas limpas pelo procedimento armazenado de limpeza manual. Opcional.
Para obter mais informações, confira sys.sp_cleanup_data_retention (Transact-SQL).
O exemplo a seguir mostra a execução do procedimento armazenado de limpeza manual para a tabela dbo.data_retention_table
.
DECLARE @rowcnt BIGINT;
EXEC sys.sp_cleanup_data_retention 'dbo', 'data_retention_table', @rowcnt OUTPUT;
SELECT @rowcnt;
Como as linhas obsoletas são excluídas
O processo de limpeza depende do layout do índice da tabela. Uma tarefa em segundo plano é criada para executar a limpeza de dados obsoletos para todas as tabelas com período de retenção finito. A lógica de limpeza do índice rowstore (heap ou árvore B) exclui linhas antigas em partes menores (até 10.000), minimizando a pressão sobre o log de banco de dados e o subsistema de E/S. Embora a lógica de limpeza utilize o índice de árvore B necessário, a ordem das exclusões para as linhas mais antigas do que o período de retenção não pode ser garantida firmemente. Em outras palavras, não use uma dependência na ordem de limpeza em seus aplicativos.
Aviso
No caso de heaps e índices de árvore B, a retenção de dados executa uma consulta de exclusão nas tabelas subjacentes, o que pode entrar em conflito com gatilhos de exclusão nas tabelas. Você deve remover gatilhos de exclusão das tabelas ou evitar o uso da retenção de dados em tabelas que excluam gatilhos DML.
A tarefa de limpeza para os índices columnstore clusterizados remove grupos de linhas inteiros de uma só vez (normalmente contendo 1 milhão de linhas cada), o que é eficiente, especialmente quando os dados são gerados e envelhecem em um ritmo alto.
A excelente compactação de dados e limpeza de retenção eficiente torna os índices columnstore clusterizados uma opção perfeita para cenários quando a sua carga de trabalho gera uma grande quantidade de dados rapidamente.
Monitorar a limpeza de retenção de dados
As operações de limpeza de política de retenção de dados podem ser monitoradas usando Eventos Estendidos no SQL do Azure no Edge. Para obter mais informações sobre eventos estendidos, confira Visão geral sobre os eventos estendidos.
Os eventos estendidos a seguir ajudam a acompanhar o estado das operações de limpeza.
Nome | Descrição |
---|---|
data_retention_task_started | Ocorre quando a tarefa em segundo plano para limpeza de tabelas com uma política de retenção é iniciada. |
data_retention_task_completed | Ocorre quando a tarefa em segundo plano para limpeza de tabelas com uma política de retenção é encerrada. |
data_retention_task_exception | Ocorre quando a tarefa em segundo plano para limpeza de tabelas com uma política de retenção falha, fora do processo de limpeza de retenção específico para essas tabelas. |
data_retention_cleanup_started | Ocorre quando o processo de limpeza de uma tabela com a política de retenção de dados é iniciado. |
data_retention_cleanup_exception | Ocorre quando o processo de limpeza de uma tabela com a política de retenção falha. |
data_retention_cleanup_completed | Ocorre quando o processo de limpeza de uma tabela com a política de retenção de dados é encerrado. |
Além disso, um novo tipo de buffer de anel nomeado RING_BUFFER_DATA_RETENTION_CLEANUP
foi adicionado à exibição de gerenciamento dinâmico sys.dm_os_ring_buffers
. Essa exibição pode ser usada para monitorar operações de limpeza de retenção de dados.