Compactação do Backup no SQL Server
O espaço ocupado no disco pelo backup sempre foi uma dor de cabeça para a maioria dos clientes que eu já prestei consultoria, já que até o SQL Server 2005 o backup era gerado sem compactação. Para reduzir a ocupação do disco, os administradores compactavam os arquivos de backup com ferramentas de terceiros. Existem vários problemas nesta solução de compactação após o backup:
- Necessidade de espaço em disco para fazer backup igual a área ocupada dentro do banco.
- Espaço adicional para executar a compactação e gerar o arquivo compactado, no final excluir o arquivo de backup original.
- Grande consumo de recursos do servidor para executar a compactação (sistema de discos e CPU).
USE master go IF DB_ID('TesteBackup') is not null DROP DATABASE TesteBackup go CREATE DATABASE TesteBackup go USE TesteBackup go CREATE TABLE tbBackup (Cod bigint,Descricao char(1000)) DECLARE @Cod bigint SET @Cod = 1 WHILE @Cod <= 250000 BEGIN INSERT tbBackup SELECT @Cod, 'Descricao - ' + convert(varchar(10),@Cod) SET @Cod = @Cod + 1 END
Agora faremos um Backup Full sem compactação (padrão) e depois com compactação utilizando a nova cláusula COMPRESSION do backup.
BACKUP DATABASE TesteBackup TO DISK = 'C:\Landry\TesteBackup_Full.bak' WITH INIT BACKUP DATABASE TesteBackup TO DISK = 'C:\Landry\TesteBackup_Full_Compact.bak' WITH INIT,COMPRESSION
Além de apresentar uma redução grande no tamanho do arquivo gerado pelo Backup, apresentou grande redução no tempo total de backup! Agora vamos comparar o resultado com dois compactadores Winzip e Winrar:
Reparem a excelente taxa de compactação que o SQL Server 2008 apresentou, comparando com os principais produtos de mercado! A grande vantagem é não ser necessário executar uma rotina após o backup, reduzindo bastante o tempo total somando Backup e Compactação nas versões anteriores.
Faremos a mesma análise com o Backup do Log, gerando atividade antes de executar o backup com e sem compactação.
-- Trunca o Log para eliminar a atividade anterior BACKUP LOG TesteBackup TO DISK = 'C:\Landry\TesteBackup_Log.bak' WITH INIT DECLARE @Cod bigint SET @Cod = 1 WHILE @Cod <= 100000 BEGIN INSERT tbBackup SELECT @Cod, 'Descricao - ' + convert(varchar(10),@Cod) SET @Cod = @Cod + 1 END BACKUP LOG TesteBackup TO DISK = 'C:\Landry\TesteBackup_Log.bak' WITH INIT go DECLARE @Cod bigint SET @Cod = 1 WHILE @Cod <= 10000 BEGIN INSERT tbBackup SELECT @Cod, 'Descricao - ' + convert(varchar(10),@Cod) SET @Cod = @Cod + 1 END BACKUP LOG TesteBackup TO DISK = 'C:\Landry\TesteBackup_Log_Compact.bak' WITH INIT,COMPRESSION
Os arquivos ficaram com o tamanho abaixo:
A compactação do Backup do Log teve resultado similar, mantendo a excelente taxa de compactação e redução no tempo total.
O padrão da instância é não compactar o backup, sendo necessário executar o script abaixo para alterar:
USE master go EXEC sp_configure 'backup compression default', '1' go RECONFIGURE WITH OVERRIDE go