Opções de compressão no SQL Server: guia prático e direto ao ponto


A compressão de dados no SQL Server sempre foi uma alavanca poderosa para reduzir armazenamento e I/O. Até o 2014, o combo clássico era Row Compression, Page Compression e Backup Compression. Em 2016, chegaram COMPRESS/DECOMPRESS (GZip nativo no T-SQL), e de lá pra cá tivemos avanços importantes em Columnstore, estimativas de compressão, UTF-8 (2019) para reduzir armazenamento de texto e novidades de backup (2022) que trazem níveis e algoritmos de compressão – inclusive aceleração com Intel QAT.
Quando usar o quê (visão geral):
COMPRESS/DECOMPRESS: ótimo para textos longos/JSON armazenados como binário; você controla quando comprime/descomprime.
Row/Page: transparência para a aplicação, sem mudar tipo de dado, com trade-off de CPU. Use sp_estimate_data_compression_savings antes.
Columnstore/Archive: para grandes volumes analíticos ou partições “frias”; compressão altíssima com possível impacto de leitura.
UTF-8 (2019): reduz armazenamento de strings majoritariamente ASCII ao usar collation *_UTF8 em
char/varchar
.Backups (2022): novos níveis/algoritmos, e opção de aceleração por hardware (QAT).
1) COMPRESS e DECOMPRESS no T-SQL (SQL Server 2016+)
As funções COMPRESS e DECOMPRESS usam GZip; retornam e recebem varbinary(max)
. Ao descompactar, faça CAST/CONVERT
para o tipo original. Isso permite reduzir drasticamente payloads textuais (descrições, comentários, JSON etc.) mantendo o controle no T-SQL.
USE tempdb;
GO
DROP TABLE IF EXISTS Products;
CREATE TABLE Products
(
ProductID int,
Name nvarchar(50),
ProductModel nvarchar(50),
Description nvarchar(400),
Description_COMP varbinary(max) -- armazeno comprimido
);
GO
INSERT INTO Products (ProductID, Name, ProductModel, Description, Description_COMP)
SELECT ProductID, Name, ProductModel, Description,
COMPRESS(Description) AS Description_COMP
FROM AdventureWorks.Production.vProductAndDescription;
SELECT ProductID, Name, ProductModel, Description,
CAST(DECOMPRESS(Description_COMP) AS nvarchar(400)) AS Description_Original
FROM Products;
-- Avaliando ganho
SELECT ProductID, Name,
DATALENGTH(Description) AS Tamanho_SemCOMP,
DATALENGTH(Description_COMP) AS Tamanho_COMP
FROM Products;
Regra prática: objetos pequenos às vezes crescem ao comprimir (overhead do algoritmo); objetos maiores/repetitivos costumam ter ótima taxa de compressão — meça sempre com
DATALENGTH
.
2) Row e Page Compression: quando a transparência vence
Row Compression altera o formato físico (elimina preenchimento fixo, zeros etc.); Page Compression acrescenta dicionário/prefixo, obtendo taxas maiores – com custo extra de CPU. O ganho varia por padrão de dados e repetição. Use sp_estimate_data_compression_savings
para estimar por tabela/índice/partição antes de aplicar em produção.
EXEC sp_estimate_data_compression_savings
@schema_name = N'dbo',
@object_name = N'SuaTabela',
@index_id = NULL, -- ou ID específico
@partition_number = NULL, -- ou partição específica
@data_compression = N'PAGE'; -- ou 'ROW'
3) Columnstore e COLUMNSTORE_ARCHIVE: compressão máxima por partição
Para workloads analíticos e data marts, columnstore traz compressão agressiva; em partições menos acessadas, aplicar DATA_COMPRESSION = COLUMNSTORE_ARCHIVE
reduz ainda mais, aceitando leituras mais lentas naquelas partições. Estratégia típica: recentes = COLUMNSTORE, histórico = COLUMNSTORE_ARCHIVE.
4) Texto mais leve com UTF-8 (SQL Server 2019)
Se seu dataset é majoritariamente ASCII/latim, habilitar collation *_UTF8
e migrar nchar/nvarchar
para char/varchar
pode cortar até ~50% do armazenamento (ex.: NCHAR(10)
→ CHAR(10)
com *_UTF8). Planeje e teste: muda collation e pode impactar aplicações/integrações.
5) Backups: compressão moderna (níveis, algoritmos e QAT em 2022)
O SQL Server 2022 adicionou níveis de compressão (LOW/MEDIUM/HIGH) e seleção de algoritmo no BACKUP ... WITH COMPRESSION
– incluindo aceleração por Intel® QAT (QAT_DEFLATE
) quando disponível. Isso reduz CPU e tempo de backup em bases grandes.
TDE + Backup Compression: desde SQL Server 2019 CU5, a engine ajusta
MAXTRANSFERSIZE
automaticamente (>64KB) para habilitar o caminho otimizado (descriptografa → comprime → criptografa). Em versões anteriores, especifique manualmenteMAXTRANSFERSIZE > 65536
para que a compressão de backup em TDE de fato surta efeito.
Exemplo (2022, escolhendo algoritmo/nível):
BACKUP DATABASE MinhaBase
TO DISK = 'E:\bkp\MinhaBase_full.bak'
WITH COMPRESSION (ALGORITHM = MS_XPRESS, LEVEL = MEDIUM); -- 2022+
Boas práticas rápidas de backup: stripe em múltiplos arquivos, valide
CHECKSUM
, e meça throughput com e sem compressão para calibrarBUFFERCOUNT
eMAXTRANSFERSIZE
.
6) Padrões de projeto na prática (checklist)
Mapeie candidatos: colunas textuais grandes (descrições, JSON, logs funcionais).
Escolha o método:
COMPRESS/DECOMPRESS se o dado é pouco filtrado e lido em blocos;
Row/Page se quer transparência para OLTP e índices;
Columnstore/Archive em DW/particionado por tempo.
Meça antes:
DATALENGTH
em amostras esp_estimate_data_compression_savings
.Planeje manutenção: rebuild/reorganize, estatísticas e monitoramento de CPU/latência.
Backups: nivele compressão/algoritmo (2022), verifique TDE/
MAXTRANSFERSIZE
.
Conclusão
Não existe “compressão melhor para todos os casos”, escolha a ferramenta certa para cada padrão de dados. COMPRESS/DECOMPRESS resolve rápido textos grandes com acesso não indexado; Row/Page são transparentes; Columnstore/Archive ideal para Data Warehouse e dados históricos; UTF-8 corta metade do espaço para strings latin; e backups 2022 dão flexibilidade (nível/algoritmo/QAT). O segredo é medir e começar pequeno, expandindo conforme os ganhos aparecem.
Fui, mas volto com mais SQL Server em breve!
✍️ Sobre o autor
O Prof. Landry é especialista em Microsoft SQL Server desde 1999, Microsoft Trainer, Professor Universitário e criador do canal SQL Server Expert no YouTube, com conteúdo técnico semanal para DBAs e profissionais de dados.
🚀 Quer aprender mais sobre SQL Server?
👉 Me acompanhe no LinkedIn e inscreva-se no canal para não perder nenhuma dica prática!
Subscribe to my newsletter
Read articles from SQL Server Expert directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

SQL Server Expert
SQL Server Expert
O Prof. Landry Duailibe é especialista em Microsoft SQL Server desde 1999, Microsoft Certified Trainer, professor universitário e criador do canal SQL Server Expert no YouTube, onde compartilha conteúdo técnico semanal para DBAs e profissionais de dados. Já ajudou milhares de alunos a evoluírem suas habilidades com SQL Server e conquistarem melhores oportunidades na área de dados.