O PolarDB for PostgreSQL (Compatible with Oracle) usa o VACUUM para recuperar o espaço de armazenamento ocupado por tuplas mortas. O espaço recuperado não retorna ao sistema operacional, mas permanece disponível para que novas linhas inseridas ou atualizadas na mesma tabela o reutilizem.

No diagrama, tuple1 e tuple2 são linhas válidas, enquanto unused representa linhas inválidas (tuplas mortas). Após a coleta de lixo, o espaço das tuplas mortas é liberado e fica disponível para reutilização.
Como funciona
O PolarDB for PostgreSQL (Compatible with Oracle) implementa o controle de concorrência multiversão (MVCC) ao manter várias versões de linhas. Cada operação UPDATE ou DELETE cria uma nova versão da linha e marca a anterior como inválida. Essas versões inválidas (tuplas mortas) se acumulam nos blocos de dados e exigem recuperação regular. Se não forem limpas a tempo, causam inchaço da tabela.
A coleta de lixo é acionada automaticamente quando o número de tuplas mortas ultrapassa um limiar calculado:
autovacuum threshold = autovacuum_vacuum_scale_factor * total_rows + autovacuum_vacuum_threshold
Por exemplo, com as configurações padrão (autovacuum_vacuum_scale_factor = 0.2, autovacuum_vacuum_threshold = 50), uma tabela com 100 linhas aciona o autovacuum quando as tuplas mortas excedem 70 (0.2 * 100 + 50). Ambos os parâmetros são configuráveis.
O VACUUM executa em segundo plano sem bloquear leituras ou gravações simultâneas. Para acionar a coleta de lixo imediatamente em uma tabela específica, execute:
VACUUM <table_name>;