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 manualmente MAXTRANSFERSIZE > 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 calibrar BUFFERCOUNT e MAXTRANSFERSIZE.


6) Padrões de projeto na prática (checklist)

  1. Mapeie candidatos: colunas textuais grandes (descrições, JSON, logs funcionais).

  2. 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.

  3. Meça antes: DATALENGTH em amostras e sp_estimate_data_compression_savings.

  4. Planeje manutenção: rebuild/reorganize, estatísticas e monitoramento de CPU/latência.

  5. 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!

0
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.