Desvendando o TOAST do PostgreSQL: Compressão e Armazenamento de Dados Grandes
Aprofundamento CEVIU
Aprofundamento
O mecanismo TOAST (The Oversized-Attribute Storage Technique) do PostgreSQL é fundamental para gerenciar dados que excedem o tamanho de uma linha padrão, o que é comum em sistemas modernos com colunas text, jsonb ou bytea. O banco de dados armazena dados em páginas de 8 KB. Para evitar que linhas grandes quebrem a performance, especialmente considerando que uma linha não pode ser dividida entre páginas, o TOAST atua quando uma linha ultrapassa 2.032 bytes. Ele faz isso de duas maneiras: comprimindo o valor da coluna ou movendo-o para uma tabela TOAST separada, mantendo um ponteiro de 18 bytes na linha original. Essa estratégia é vital para a eficiência de I/O e para manter o footprint de memória.
A escolha da estratégia de armazenamento por coluna (PLAIN, EXTENDED, EXTERNAL, MAIN) define como o TOAST agirá. Por exemplo, EXTENDED, o padrão para tipos como text, permite compressão e posterior movimentação se a linha ainda for muito grande. Já EXTERNAL move os dados para a tabela TOAST sem compressão, o que pode ser ideal para dados já comprimidos ou para acesso otimizado em leituras centrais de grandes blocos binários, como vimos na cobertura do CEVIU sobre organização de arquivos do PostgreSQL em 12 de outubro de 2026. Compreender essas nuances é crucial para engenheiros de plataformas que buscam otimizar a confiabilidade e o desempenho de seus bancos de dados.
O que mudou
A principal evolução é a mudança do algoritmo de compressão padrão para TOAST no PostgreSQL 19, que migra de pglz para LZ4 em builds com suporte. Essa alteração, que já havia sido antecipada por nós no CEVIU em 20 de julho de 2026 com a notícia 'Postgres 19 Aprimora Compressão de Dados com Migração para LZ4', e posteriormente reforçada pela cobertura sobre as melhorias de desempenho gerais da versão em 20 de agosto de 2026, representa um ganho significativo na velocidade de compressão e descompressão para a maioria dos casos de uso.
Enquanto o pglz, com sua janela de 4 KB e busca mais aprofundada, pode oferecer taxas de compressão ligeiramente melhores para dados com padrões repetitivos e próximos (como chaves em JSON), o LZ4 se destaca pela sua velocidade, mesmo com uma janela maior de 64 KB, devido a uma abordagem de busca mais rápida. No entanto, o artigo aponta que o pglz ainda pode ser mais eficiente para prévias de texto (left()), pois o PostgreSQL pode estimar melhor o tamanho comprimido. Para dados binários muito grandes onde há busca por offset, o uso da estratégia EXTERNAL sem compressão se mostra mais performático do que qualquer um dos algoritmos.
Por que isso importa
Para equipes de DevOps e engenheiros de plataforma, a gestão eficiente do armazenamento no PostgreSQL impacta diretamente os custos de infraestrutura e a performance das aplicações. Entender o TOAST e suas estratégias de compressão permite otimizar o uso de disco, reduzir o volume de WAL (Write-Ahead Log) e melhorar o desempenho de consultas ao diminuir a quantidade de dados a serem lidos e trafegados. A escolha entre LZ4, pglz ou EXTERNAL não é trivial e deve ser feita com base no perfil de acesso e tipo de dados, garantindo que a otimização não gere gargalos em outras áreas.
Linha do tempo
CEVIU News publica sobre a futura migração do padrão TOAST para LZ4 no Postgres 19.
CEVIU News cobre o foco do Postgres 19 em otimização e desempenho.
CEVIU News aprofunda o funcionamento do TOAST e a transição para LZ4 no Postgres 19.
Perguntas frequentes
O que é o mecanismo TOAST no PostgreSQL?
TOAST (The Oversized-Attribute Storage Technique) é uma técnica do PostgreSQL para gerenciar eficientemente dados de tamanho variável muito grandes. Ele comprime ou move esses dados para uma tabela auxiliar, impedindo que linhas excedam o tamanho máximo de uma página de dados (8 KB) e otimizando o armazenamento principal.
Quando o TOAST é acionado para comprimir dados?
O TOAST é acionado quando o tamanho total de uma linha excede 2.032 bytes. A partir desse ponto, o PostgreSQL tenta comprimir os valores das colunas variáveis maiores. Se a compressão não for suficiente para que a linha volte para um tamanho aceitável, o TOAST move esses valores para uma tabela TOAST separada, mantendo apenas um ponteiro na linha original.
Qual a diferença entre os algoritmos de compressão pglz e LZ4 no TOAST?
O pglz é o algoritmo nativo do PostgreSQL, com uma janela de 4 KB, que busca por correspondências mais longas e pode gerar arquivos ligeiramente menores para dados específicos. Já o LZ4, adotado como padrão no Postgres 19, é um algoritmo de uso geral focado em alta velocidade de compressão e descompressão, com uma janela de 64 KB. A escolha ideal depende do equilíbrio desejado entre tamanho do dado e performance de I/O/CPU.
Quando devo usar a estratégia de armazenamento EXTERNAL?
A estratégia EXTERNAL é útil para colunas que armazenam dados já comprimidos (como imagens JPEG) ou para grandes dados binários (bytea) que são frequentemente acessados a partir do meio (leitura por offset). Ela move os dados para a tabela TOAST sem compressão, permitindo que o PostgreSQL calcule a posição exata de chunks, otimizando leituras parciais.
Fontes
- planetscale.comfonte original
- Categoria
- CEVIU DevOps
- Publicado
- 14 de outubro de 2026
- Editoria
- CEVIU DevOps

