PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come scoprire gli indici frammentati e deframmentarli in PostgreSQL?

Normalmente non devi preoccuparti di questo.

Tuttavia, se si è verificata un'eliminazione o un aggiornamento di massa, o se il tasso di cambiamento continuo è stato così alto che l'autovacuum non è riuscito a tenere il passo, potresti ritrovarti con un indice molto gonfio.

Lo strumento per determinare quell'id è il pgstattuple estensione:

CREATE EXTENSION pgstattuple;

Quindi puoi esaminare il rigonfiamento dell'indice in questo modo:

SELECT * FROM pgstatindex('spatial_ref_sys_pkey');

-[ RECORD 1 ]------+-------
version            | 2
tree_level         | 1
index_size         | 196608
root_block_no      | 3
internal_pages     | 1
leaf_pages         | 22
empty_pages        | 0
deleted_pages      | 0
avg_leaf_density   | 64.48
leaf_fragmentation | 13.64

Questo indice è in ottima forma (mai utilizzato):ha solo il 14% di rigonfiamento.

Tieni presente che gli indici vengono creati per impostazione predefinita con un fillfactor di 90, ovvero i blocchi di indice non vengono riempiti oltre il 90% da INSERT .

È difficile dire quando un indice è gonfio, ma se leaf_fragmentation supera 50-60, non è così bello.

Per riorganizzare un indice, usa REINDEX .