PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment trouver des index fragmentés et les défragmenter dans PostgreSQL ?

Normalement, vous n'avez pas du tout à vous en soucier.

Cependant, s'il y a eu une suppression ou une mise à jour en masse, ou si le taux de modification soutenu était si élevé que l'autovacuum n'a pas pu suivre le rythme, vous pouvez vous retrouver avec un index très gonflé.

L'outil pour déterminer cet identifiant le pgstattuple extension :

CREATE EXTENSION pgstattuple;

Ensuite, vous pouvez examiner le gonflement de l'index comme ceci :

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

Cet index est en excellent état (jamais utilisé) :il n'a que 14 % de ballonnement.

Gardez à l'esprit que les index sont créés par défaut avec un fillfactor de 90, c'est-à-dire que les blocs d'index ne sont pas remplis à plus de 90 % par INSERT .

Il est difficile de dire quand un index est gonflé, mais si leaf_fragmentation dépasse 50-60, ce n'est pas si joli.

Pour réorganiser un index, utilisez REINDEX .