Compressão de dados SQL Server 2008
SQL Server 2008 e compactação de dados.
Sinceramente eu não sei porque o time de desenvolvimento do SQL Server demorou tanto para pensar em compactação de dados, não fazia o menor sentido um campo Integer com o valor ‘2’ utilizar 4 bytes de espaço sendo que um campo VarChar(8000) com o mesmo valor ‘2’ utilizar apenas 1 byte de espaço.
O conceito de valores variáveis tinha que ser aplicado para todos os data-types, deixando o passado de lado a boa noticia é que no SQL Server 2005 SP2 foi introduzido um novo conceito de armazenamento de dados chamado VarDecimal, este que seria o percussor de todo o conceito de compactação do SQL2008.
Para ler um pouco sobre o VarDecimal visite o link http://msdn2.microsoft.com/en-us/library/bb508963.aspx.
Em poucas palavras o que foi feito é o seguinte, se você grava o valor ‘1’ em um campo Decimal(18,4) este campo irá ocupar 13 bytes de dados porem se você habilitar VarDecimal para esta tabela o campo iria ocupar apenas 2 bytes, leia o artigo acima vale a pena.
Agora se você foi um cara esperto e já migrou para SQL Server 2005 já instalou o SP2 e utiliza o VarDecimal, parabéns, mas só tem um detalhe, no Books Online do SQL2008 ele já avisam “Avoid using this feature in new development work” pois isso já vai ser removido de futuras versões do SQL.
A compactação de dados veio para substituir o conceito do VarDecimal que só funciona nos campos Numeric e Decimal para expandir está tecnologia para todos os data-types do SQL Server. Existem 2 tipos de compactação de dados no SQL 2008, são eles: Compactação por página e por Linhas.
Compactação por linha significa que o SQL irá controlar todos os data-types de sua tabela como variáveis, ou seja, se você utilizar um BigInt e gravar 0 nele ele irá ocupar 1 byte. Este comportamento valerá para todas as colunas de sua tabela.
Compactação por página significa que o SQL irá gravar apenas uma vez uma informação na página de dados, quando a mesma informação for inserida novamente ele irá apenas alocar um ponteiro para a informação já existente. O responsável por controlar este comportamento é um algoritmo chamado LZ78(Lempel-Ziv) Lempel e Ziv são 2 malucos que criaram o algoritmo, o mesmo utilizado para compactação de imagens por exemplo arquivos gif. Isso significa que se eu tiver uma tabela chamada Clientes e na coluna nome tiver o valor “Silva” se na mesma página de dados já existir um “Silva”o SQL não irá alocar espaço na página para gravar novamente este valor, e sim irá incluir um ponteiro para o valor já existente. Show de bola.
Para nós pobre mortais do mundo real só nos resta esperar chegar 2010 para começarmos a ver nossos clientes migrando para SQL Server 2008, para enfim poder utilizar novos conceitos como estes. L