Articles

Compressão no SQL Server: COMPACTAR e DESCOMPACTAR

Posted by admin

No Twitter recentemente, perguntei a:

alguém que eu sei usar o COMPRESS e DECOMPRESS recursos em T-SQL?

para aqueles que responderam afirmativamente, perguntei:

o que fez você decidir sobre isso em oposição à compressão ROW ou PAGE?

Joey D’Antoni (blog / Twitter), um dos meus co-autores, me lembrou que a compactação de linha e página não funciona em dados LOB (“objeto grande”). Dave Dustin (Twitter) e Niko Neugebauer (blog | Twitter) disseram que usam especificamente COMPRESS para dados LOB por esse motivo.

alterações de código

usar essas funções requer alterações no código existente porque você precisa usar a função COMPRESS ao inserir dados. Dave e Niko fizeram isso ocultando a funcionalidade dentro das visualizações.

se você não puder fazer alterações de código em seu ambiente, talvez seja necessário recorrer à compactação de linha e página ou, possivelmente, aos índices columnstore.

como funciona?

lançado com o SQL Server 2016, COMPRESS aproveita o algoritmo de compressão gzip de código aberto e pode reduzir o espaço usado em até 90%, dependendo do tipo de dados em questão. Os dados são armazenados como o tipo de dados VARBINARY(MAX) :

INSERT INTO dbo.Table1 (Col1, Col2) VALUES ('C0001', COMPRESS('<long string goes here>'));

DECOMPRESS é usado para ler os dados novamente:

SELECT Col1, DECOMPRESS(Col2) AS Col2 FROM dbo.Table1 WHERE Col1 = 'C0001';

onde o usaria?

isso é ótimo para acompanhar os dados LOB que não precisam ser consultados com frequência, por exemplo, grandes strings contendo texto JSON e XML. Como mencionado em um post anterior, o tipo de dados XML pode não ser apropriado para fins de auditoria, pois modifica permanentemente os dados, enquanto COMPRESS seria um adequado mecanismo de armazenamento, pois os dados são exatamente os mesmos quando ler novamente.

existem limitações?

você não pode indexar dados compactados, porque é armazenado como uma matriz de bytes compactada. Se você deseja criar um índice, pode usar a compactação de linha ou página e esperar o melhor, ou usar uma coluna calculada contendo os dados necessários da coluna e indexá-los.

Related Post

Leave A Comment