Executando verificação de segurança...
3

O mito de que “deletar libera espaço” no PostgreSQL

No inicio quando comecei a mexer com o PostgreSQL achava que, ao deletar dados, o tamanho do banco iria diminuir.

Na empresa onde trabalho hoje, em alguns momentos, banco vivia reduzindo espaco livre drasticamente pelo volume de dados. E no começo, tivemos situações de deletar dezenas de gigas esperando recuperar espaço… e nada. O tamanho do arquivo da tabela continuava igual.

O desastre veio quando tentamos um VACUUM FULL para “dar aquela limpada”.
A tabela era quase 10x maior do que o espaço livre disponível. O VACUUM tentou reservar o espaço pra reescrever a tabela… e simplesmente acabou com o disco.
Resultado: os serviços de produção caíram todos.
Caiu geral. Rir pra nao chorar. 😂

Hoje sei que essas coisas acontecem porque o PostgreSQL funciona com MVCC, e deletar só marca linhas como “não utilizadas”, mas o espaço continua lá dentro do arquivo. O banco pode até reutilizar esse espaço internamente depois, mas não devolve pro disco sozinho.

No fim, tudo se resume a “Deletar” não significa “diminuir o tamanho do banco”.
Significa apenas que o banco pode reutilizar aquele espaço, se quiser.
Se a intenção é de fato liberar espaço em disco, aí entra planejamento, pra poder rodar o vacuum na hora certa e começando pelas tabelas menores...

Carregando publicação patrocinada...
2

Não sei desse mito, talvez ele exista entre as pessoas que não entendem de banco de dados e mesmo assim estão mexendo em um.

Na verdade, deletar é uma operação até pouco feita em sistemas mais robustos. Mas mesmo considerando que o caso é de deletar, é necessário entender e dimensionar tudo de acordo com as necessidades técnicas, inclusive pode ser interessante em alguns casos gerar outro banco de dados enxuto.

Sempre uma lida cuidadosa da documentação (E seguir os links) vale a pena. Mas antes de fazer, seria bom pesquisar sobre o assunto para ver a experiência de outras pessoas, especialmente as que dominam o SGDB.

S2


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui).

1

Um role que pode ajudar é remover o bloat, pode usar algo comopg-defrag, ele faz online com pouco lock na tabela (preciso atualizar o readme 😢) ou pgcompacttable que é a versão original 😅😅

1

ja trabalhei com tabela que a quantidade de insert era pouca coisa diferente da quantidade de delete e isso diariamente, porem a manutenção era constante, automatizada, nao havia problemas

ja vi existir problema de espaço quando estava aprendendo sobre isso, vaccum, reindex,...

o delete hoje se resume a update em deleted_at