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