Voltar
Os custos operacionais do REPACK (CONCURRENTLY) no PostgreSQL 19

PostgreSQL 19 e o REPACK (CONCURRENTLY): Análise dos Custos Operacionais

Aprofundamento CEVIU

Aprofundamento

O REPACK (CONCURRENTLY) no PostgreSQL 19 revoluciona a reescrita de tabelas. Ele centraliza as funcionalidades de VACUUM FULL e CLUSTER, permitindo a operação online. A ferramenta usa o mecanismo de decodificação lógica, o mesmo da replicação. Ela cria um slot temporário de replicação para tirar um snapshot. Todas as mudanças na tabela durante a cópia são coletadas do WAL por um worker em segundo plano. Depois de copiar as linhas visíveis do snapshot para um novo arquivo e reconstruir os índices, o REPACK aplica essas mudanças acumuladas.

A fase final exige um bloqueio ACCESS EXCLUSIVE breve para aplicar as últimas alterações e trocar os arquivos. Esta é a única interrupção para escrita. É crucial notar que o REPACK (CONCURRENTLY) não é MVCC-safe. Transações REPEATABLE READ longas podem ver uma tabela vazia se o REPACK terminar antes de elas lerem. Outro ponto crítico é o limite de cerca de 105 milhões de atualizações ou exclusões durante a execução. Ultrapassar isso causa falha e pode levar a um OOM kill, derrubando o banco de dados.

O que mudou

A grande novidade é que o que antes dependia de extensões externas como pg_repack ou pg_squeeze agora está integrado ao PostgreSQL. A notícia atual detalha que o REPACK (CONCURRENTLY) é uma funcionalidade nativa do PostgreSQL 19. Isso significa menor dependência de componentes externos e maior facilidade de uso, especialmente em serviços gerenciados. A cobertura anterior do CEVIU sobre o PostgreSQL 19, como a de 20 de agosto de 2026, já apontava para um foco em otimizações e melhorias de desempenho. Esta nova funcionalidade é uma entrega concreta dessas promessas de performance, oferecendo uma forma mais otimizada e eficiente de lidar com o inchaço de tabelas.

Por que isso importa

Para desenvolvedores e DBAs, a chegada do REPACK (CONCURRENTLY) no PostgreSQL 19 é um passo importante na gestão de bancos de dados. A ferramenta simplifica a manutenção de tabelas online, eliminando a necessidade de extensões e seus pré-requisitos, como o shared_preload_libraries. Isso a torna acessível em ambientes onde extensões são restritas. Contudo, a análise dos custos operacionais mostra que esta otimização não vem sem contrapartidas. Impactos no VACUUM global, um breve bloqueio de escritas e o limite de 105 milhões de mudanças exigem um planejamento cuidadoso para garantir que a funcionalidade seja utilizada de forma eficiente e segura, sem comprometer a estabilidade do sistema.

Linha do tempo

  1. PostgreSQL 19 Beta 1 está disponível para testes

  2. Postgres 19 Aprimora Compressão de Dados com Migração para LZ4

  3. Postgres 19 Chega com Foco na Otimização e Melhorias de Desempenho

  4. PostgreSQL 19: Consistência de Leitura em Réplicas com 'WAIT FOR LSN' Promete Revolucionar Aplicações Distribuídas

  5. PostgreSQL 19 Beta 3 Chega com SQL Temporal e Otimizações de DDL

  6. PostgreSQL 19 Inova com Guia de Planos de Execução para Otimização de Queries

  7. PostgreSQL 19 e o REPACK (CONCURRENTLY): Análise dos Custos Operacionais

Perguntas frequentes

O que é REPACK (CONCURRENTLY) no PostgreSQL 19?

É uma funcionalidade nativa do PostgreSQL 19 que permite a reescrita de tabelas online para otimizar o espaço e o desempenho. Ela combina as operações de VACUUM FULL e CLUSTER, mas permite que a tabela seja acessada durante a maior parte do processo. A ferramenta utiliza decodificação lógica para rastrear mudanças, minimizando o tempo de inatividade.

Quais as principais vantagens em relação a ferramentas anteriores como pg_repack e pg_squeeze?

A principal vantagem é a integração nativa ao PostgreSQL 19, eliminando a necessidade de extensões externas e shared_preload_libraries. Isso permite seu uso em serviços gerenciados e geralmente resulta em menor geração de WAL comparado ao pg_repack. Além disso, a implementação é otimizada para a arquitetura interna do banco de dados.

Quais são as limitações e custos operacionais do REPACK (CONCURRENTLY)?

Ele pode impactar o VACUUM global, pois impede a remoção de versões de linha antigas. Há um breve bloqueio de escritas na fase final da operação para a troca de arquivos. Atualmente, existe uma limitação de aproximadamente 105 milhões de atualizações ou exclusões por execução. Atingir esse limite pode causar a falha da operação e até um OOM kill do servidor.

Por que o REPACK (CONCURRENTLY) não é MVCC-safe?

Durante a reescrita, o REPACK cria uma nova versão da tabela. Transações que usam isolamento REPEATABLE READ e que foram iniciadas antes da conclusão do REPACK podem, ao tentar ler a tabela após a operação, não encontrar nenhuma linha ou ter uma visão inconsistente. Isso acontece porque o novo conjunto de dados pode ser considerado 'no futuro' pela snapshot antiga da transação.

Fontes

Avalie este artigo:
Categoria
CEVIU Dados
Publicado
28 de setembro de 2026
Editoria
CEVIU Dados

Quer receber mais sobre CEVIU Dados?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser