Desempenho de tabelas temporais com controle de versão do sistema e otimização de memória
Aplica-se a: SQL Server 2016 (13.x) e posterior Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Este artigo aborda algumas considerações de desempenho específicas ao usar tabelas temporais com versão do sistema e otimização de memória.
Quando você adiciona controle de versão a uma tabela não temporal existente, espere um impacto de desempenho nas operações de atualização e exclusão porque a tabela de histórico é atualizada automaticamente.
Considerações sobre o desempenho
Cada atualização e exclusão é registrada em uma tabela de histórico com otimização de memória interna. Você poderá observar um consumo inesperado de memória se sua carga de trabalho usar essas duas operações massivamente. Portanto, recomendamos fazer o seguinte:
Não execute exclusões massivas da tabela atual em uma mesma etapa. Considere excluir dados em vários lotes com liberações de dados invocadas manualmente entre eles, usando sp_xtp_flush_temporal_history, ou enquanto
SYSTEM_VERSIONING = OFF
.Não execute grandes atualizações de tabela de uma só vez, pois isso pode resultar em consumo de memória duas vezes maior que a quantidade de memória necessária para atualizar uma tabela de otimização de memória não temporal. Esse consumo duplicado de memória é temporário, pois a tarefa de liberação de dados funciona regularmente para manter o consumo de memória da tabela de preparo interna dentro dos limites projetados no estado estável. O limite é 10% do consumo de memória da tabela temporal atual. Considere a possibilidade de fazer atualizações grandes em vários lotes ou enquanto
SYSTEM_VERSIONING = OFF
, por exemplo, usando atualizações para definir os padrões de colunas recém-adicionadas.
O período de ativação para a tarefa de liberação de dados não é configurável, mas você pode executar sp_xtp_flush_temporal_history manualmente conforme necessário.
Considere usar columnstore clusterizado como uma opção de armazenamento de tabela de histórico com base em disco, especialmente se você planeja executar análise de consultas em dados históricos que usam funções de agregação ou janelas. Nesse caso, um índice columnstore clusterizado é uma opção ideal para sua tabela de histórico. Os índices columnstore clusterizados fornecem boa compactação de dados e se comportam de maneira amigável à inserção, alinhando-se à forma como os dados de histórico são gerados.
Conteúdo relacionado
- Tabelas temporais com controle de versão do sistema e tabelas com otimização de memória
- Criar uma tabela temporal com controle de versão do sistema com otimização de memória
- Trabalhar com tabelas temporais com controle de versão do sistema com otimização de memória
- Monitorar tabelas temporais com controle de versão do sistema com otimização de memória
- Tabelas temporais
- Verificações de consistência do sistema de tabela temporal
- Gerenciar a retenção de dados históricos em tabelas temporárias com versão do sistema
- Exibições e funções de metadados de tabela temporal