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.