domingo, 17 de fevereiro de 2008

Compactação do Backup no SQL Server 2008

Este artigo foi escrito utilizando o CTP de Novembro do SQL Server 2008.

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).

A necessidade de compactar o backup aparece também na solução de disponibilidade chamada Standby Server (Log Shipping). Esta solução mantém em sincronia uma cópia do banco de dados em outro servidor através de Backup e Restore do Log, para recuperar rapidamente o sistema na falha do servidor de produção. Para reduzir o impacto na rede, gerado pelas cópias freqüentes dos Backups do Log, é necessário compactar o backup antes da transmissão e descompactar no destino antes do Restore.

Com o novo recurso de compactação do backup no SQL Server 2008 ficou agora muito fácil resolver os problemas descritos acima. Vamos explorar esta funcionalidade e analisar a taxa de compactação, comparando com produtos de terceiros.

Primeiro vamos criar um banco de dados contendo uma tabela recheada de linhas, para gerar um arquivo de dados com 50MB. Execute o script abaixo:

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

Após a execução do script acima todo backup será compactado, não sendo necessário o uso da cláusula COMPRESSION.
Até o próximo post!
Landry.

2 comentários:

Unknown disse...

Excelente artigo muito útil.

Unknown disse...
Este comentário foi removido pelo autor.