Eu tenho um ambiente de teste em execução no SQL Server 2017 Express que usa apenas dados recentes (um trabalho remove dados com mais de três meses uma vez por mês).
O trabalho faz o seguinte:
- Usando um loop while, removeu dados com mais de três meses
- Encolhe o banco de dados, se seu tamanho estiver acima de algum limite
- Reindexa todas as tabelas
Este artigo descreve como é terrível reduzir o banco de dados devido à fragmentação do índice e por que a reindexação também requer espaço extra.
A última execução começou a partir de um banco de dados de 9 GB. A exclusão leva de 3 a 4 minutos e a reindexação leva cerca de 30 segundos. O banco de dados foi reduzido para cerca de 5 GB.
Como este é um ambiente de teste, posso arcar com esse tempo de inatividade sem problemas.
Pergunta: É ruim encolher + reindexar depois de remover uma parte significativa dos dados?
Bem, pergunte a si mesmo: qual é o objetivo de reduzir, se você sabe que a reindexação (e quaisquer outras alterações de dados, na verdade) expandirá o arquivo novamente após a redução?
Mesmo que a reindexação não o traga de volta para 9 GB, se o banco de dados crescer no futuro, vejo valor absolutamente zero em recuperar temporariamente parte desse espaço em disco . O que você fará com esse espaço até que o banco de dados tenha que crescer novamente? Arrendar e depois despejá-los? É como um restaurante desmontando uma mesa toda vez que um cliente se levanta e sai, apenas para remontá-la quando um novo cliente chega.
Na sua situação (onde você precisa manter o arquivo de dados abaixo de 10 GB por causa da licença que você escolheu e nenhum outro motivo), não faz sentido descer para 5 GB apenas para crescer novamente para 9 GB novamente. Eu prefiro ter algum monitor ativo que avisa quando o arquivo de dados está voltando para o espaço de 9 GB novamente (ou apenas mantenha-o em 9 GB!) e o espaço usado está se aproximando de 9 GB.
Em vez de pensar nisso como um requisito "manter os últimos três meses", pense nisso como um requisito "manter 9 GB de dados". Que você terá que revisitar à medida que seus volumes de dados por período de tempo (dia/semana/qualquer que seja) aumentam de qualquer maneira. O que acontece quando você acumula mais de 10 GB de dados em três meses?
Como este é um ambiente de teste, por que você não pode usar o SQL 2017 Developer? Assim, você não ficará restrito ao limite de 10 GB e, portanto, menos necessidade de excluir registros.