Compressão de dados – Row/Linha

Neste artigo irei comentar um pouco sobre a compressão de dados a nivel de linha disponivel no SQL Server.

Primeiramente o script utilizado para testes e abaixo as explicações:

--Cria a tabela
IF(OBJECT_ID('Vendas') IS NOT NULL)
	DROP TABLE Vendas

CREATE TABLE Vendas
(
	Id INT IDENTITY(1,1) PRIMARY KEY,
	Id_Funcionario INT,
	Id_Cliente INT,
	Id_Venda INT
)
GO

INSERT INTO Vendas(Id_Funcionario, Id_Cliente, Id_Venda)
SELECT CHECKSUM(NEWID()), CHECKSUM(NEWID()), CHECKSUM(NEWID())
GO 5000

--Vendo espaço sem compressao
EXEC sp_spaceused 'Vendas'

--Seta compressao a nivel de linha
ALTER TABLE Vendas REBUILD WITH (DATA_COMPRESSION = ROW)

--Vendo espaço com compressao
EXEC sp_spaceused 'Vendas'

/*
				name	rows	reserved	data	index_size	unused
Sem compressão: Vendas	5000    208 KB		128 KB	24 KB		56 KB
Com compressão: Vendas	5000    144 KB		104 KB	24 KB		16 KB
*/

Podemos ver claramente que houve uma redução do espaço utilizado pela tabela sem uma redução do numero de linhas.

O que aconteceu?
O SQL Server identificou todos os valores presentes na tabela e passou a ocupar apenas o numero de bytes necessarios para o armazenamento daquele valor. Por padrão o tipo de dados INT ocupa 4 bytes, porem, caso o valor a ser guardado seja inferior a 255 por exemplo, apenas 1 byte será necessario para seu armazenamento, fazendo com que seja economizado 3 bytes de espaço em disco para aquela pagina.

Todos os tipos de dados podem ser utilizados na compressão?
Sim e não! Sim pelo fato de que voce não terá erros na execução do script de compressão independente dos tipos de dados existentes na tabela, porem alguns deles simplismente não surtirão efeitos nenhum, como é o caso dos datatypes de textos (Varchar por exemplo). Veja o script abaixo:

--Cria a tabela
IF(OBJECT_ID('Vendas') IS NOT NULL)
	DROP TABLE Vendas

CREATE TABLE Vendas
(
	Id INT IDENTITY(1,1) PRIMARY KEY,
	Funcionario VARCHAR(100),
	Cliente VARCHAR(100),
	Venda VARCHAR(100)
)
GO

INSERT INTO Vendas(Funcionario, Cliente, Venda)
SELECT REPLICATE('a', 100), REPLICATE('a', 100), REPLICATE('a', 100)
GO 5000

--Vendo espaço sem compressao
EXEC sp_spaceused 'Vendas'

--Seta compressao a nivel de linha
ALTER TABLE Vendas REBUILD WITH (DATA_COMPRESSION = ROW)

--Vendo espaço com compressao
EXEC sp_spaceused 'Vendas'

/*
				name	rows	reserved	data	index_size	unused
Sem compressão: Vendas	5000    1680 KB		1600 KB	24 KB		56 KB
Com compressão: Vendas	5000    1616 KB		1600 KB	16 KB		0 KB
*/

Vejam que o tamanho dos dados não houve redução mesmo com a compressão de linha ativada, portanto é necessario avaliar muito bem cada tabela antes de efetivamente sair ativando a compressão de linha em todas as tabelas.

Para maiores informações visite o link oficial BOL: http://msdn.microsoft.com/en-us/library/cc280576.aspx

Anúncios
Post a comment or leave a trackback: Trackback URL.

Trackbacks

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: