sql >> Database >  >> RDS >> PostgreSQL

Hoe gefragmenteerde indexen te achterhalen en te defragmenteren in PostgreSQL?

Normaal gesproken hoef je je daar helemaal geen zorgen over te maken.

Als er echter een massale verwijdering of update heeft plaatsgevonden, of als de aanhoudende veranderingssnelheid zo hoog was dat het autovacuüm het niet kon bijhouden, kan het zijn dat u een sterk opgeblazen index krijgt.

De tool om te bepalen dat de pgstattuple extensie:

CREATE EXTENSION pgstattuple;

Dan kun je indexbloat als volgt onderzoeken:

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

Deze index is in uitstekende staat (nooit gebruikt):hij heeft slechts 14% bloat.

Houd er rekening mee dat indexen standaard worden gemaakt met een fillfactor van 90, dat wil zeggen dat indexblokken niet voor meer dan 90% worden gevuld door INSERT .

Het is moeilijk te zeggen wanneer een index opgeblazen is, maar of leaf_fragmentation overschrijdt 50-60, het is niet zo mooi.

Gebruik REINDEX . om een ​​index te reorganiseren .



  1. Optimale chunksize-parameter in pandas.DataFrame.to_sql

  2. Postgresql-query tussen datumbereiken

  3. MySQL + JAVA-uitzondering:vóór de start van de resultatenset

  4. sluimerstand criteria filteren op een set opsommingswaarden