Bloat dell'indice
Un indice che occupa il triplo dello spazio necessario, perché le voci eliminate hanno lasciato pagine semivuote che non vengono mai ricompattate.
La causa sta nell'MVCC: un aggiornamento crea una nuova versione della riga e quindi una nuova voce nell'indice, mentre la vecchia resta finché il vacuum non la rimuove. Lo spazio viene poi riutilizzato solo se i nuovi valori appartengono proprio a quella pagina, cosa che con chiavi crescenti come i timestamp non accade quasi mai. Il risultato è un B-tree di pagine mezze vuote: più pagine da leggere, sfruttamento peggiore della cache, ricerche più lente. Si misura con l'estensione pgstattuple o con le note query di stima. Il rimedio è REINDEX CONCURRENTLY, disponibile da PostgreSQL 12, che ricostruisce l'indice senza bloccare le scritture, oppure pg_repack nelle versioni precedenti.