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