ShrinkDatabase SQL Server pode causar problemas de fragmentação e de desempenho

No SQL Server, você pode usar o comando DBCC SHRINKDATABASE para reduzir o espaço ocupado pelos arquivos de dados e log de ​​um banco de dados.

ShrinkDatabase SQL Server

 

O problema com SHRINKDATABASE é que, ao contrário do que possa parecer, se não for usado com cuidado, o resultado pode ser um aumento significativo na fragmentação dos índices e tabelas, que conduz a um agravamento do desempenho dos nossos SQL Server, dados e até mesmo um aumento da pegada quando afectados por índices de fragmentação são reconstruídos.

O que faz o comando DBCC ShrinkDatabase

O comando PSIQUIATRA libera o espaço livre deixado nos arquivos do banco de dados, fazendo com que ele "retorno" para o sistema operacional em vez de serem reservados para o crescimento de dados. Redução do espaço ocorre, mas você tem que pensar sobre o crescimento da base de dados. Se o espaço livre contíguo que usa cada tabela não é esquerda, os novos dados serão criados em diferentes locais físicos, a fragmentação vai aumentar, e os índices e os tipos vai ser complicado.

Incluir SHRINKDATABASE entre a manutenção diária do SQLServer BD, por exemplo, pode causar um problema grave de fragmentação, uma vez que os dados são inseridos pode ser armazenado num local físico diferente para cada novo dia após SHRINK implementação.

Quando e como usar o SQL Server Shrink

Mas, em seguida, encolher DATABASE útil? Limpar servindo em certos casos. Se um banco de dados SQL Server são excluídos ou tabelas, o que reduz consideravelmente o volume ocupado pelos dados, e não há nenhuma disposição para reocupar o espaço são truncados, pode estar interessado em usá-lo para melhor ajustar a relação entre o espaço ocupado e espaço reservado reduzindo assim o tamanho da base de dados, mas é sempre aconselhável deixar uma percentagem de espaço livre reservado para ambas as operações diárias da base de dados e para o crescimento dos dados com fragmentação mínima.

No caso de utilizar o SQLServer Shrink, para garantir que o espaço reservado e que o crescimento não cria problemas de fragmentação e desempenho, é importante rever os argumentos que suportam o comando como se o segundo argumento é relatado com uma redução do número de deixando espaço vai ter esse número como uma percentagem de espaço não utilizado que não é devolvido para o sistema operativo.

Sintaxe do Comando

DBCC SHRINKDATABASE
(Database_name | database_id | 0
         [, Target_percent]
         [, {NOTRUNCATE | TRUNCATEONLY}]
)
[WITH NO_INFOMSGS]

Exemplo do uso de Shrink

Por exemplo, se nós apenas fazer operações de limpeza (eliminar os regimes não utilizados, temporárias ou simplesmente tabelas desnecessárias) em nosso banco de dados que sabemos ter reduzido o espaço ocupado pelos dados, 50%, e queremos reduzir o espaço ocupado por arquivos no banco de dados, mas deixando de lado 15% de espaço livre para operações diárias, e crescimento que prevemos no banco de dados para o ano em curso, podemos executar o comando:

DBCC SHRINKDATABASE (Mi_base_de_datos, 15);

Assim, o espaço ocupado pelos ficheiros de dados e registo de base de dados seria reduzido em aproximadamente 35%. Se não incluir o parâmetro de porcentagem reduziria mais espaço, mas no dia seguinte as novas inserções de dados e começar a exigir aumentos de tamanho de arquivo, obviamente, não estar no mesmo espaço físico de dados existente, e aumentar a fragmentação de dados.

Recomendação para reduzir a fragmentação

E por falar em fragmentação, por isso é aconselhável incluir nas tarefas de manutenção regular é uma reconstrução dos índices com reconstrução, que reduzem a fragmentação e melhorar o desempenho do DB, embora possa aumentar um pouco mais de espaço usado:

ALTER INDEX REBUILD idx_mitabla_ID ON MyTable;

 

Referências

Finalmente, posso ligar referência alguns posts de outros sites que explicam por que fazer um Reduzir Banco de Dados geralmente não é uma boa idéia , fornecer razões para não usar um ShrinkDatabase , ou fazer uma demonstração prática do que acontece com o espaço e fragmentação fazer uma ShrinkDatabase