PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie finde ich fragmentierte Indizes heraus und defragmentiere sie in PostgreSQL?

Normalerweise müssen Sie sich darüber überhaupt keine Gedanken machen.

Wenn jedoch eine Massenlöschung oder -aktualisierung stattgefunden hat oder die Daueränderungsrate so hoch war, dass die Selbstbereinigung nicht mithalten konnte, kann es sein, dass Sie am Ende einen stark aufgeblähten Index erhalten.

Das Tool zum Bestimmen dieser ID ist pgstattuple Erweiterung:

CREATE EXTENSION pgstattuple;

Dann können Sie Index Bloat wie folgt untersuchen:

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

Dieser Index ist in ausgezeichneter Form (nie verwendet):Er hat nur 14 % Blähungen.

Beachten Sie, dass Indizes standardmäßig mit einem fillfactor erstellt werden von 90, d.h. Indexblöcke werden durch INSERT nicht zu mehr als 90% gefüllt .

Es ist schwer zu sagen, wann ein Index aufgebläht ist, aber wenn leaf_fragmentation 50-60 überschreitet, ist es nicht so schön.

Um einen Index neu zu organisieren, verwenden Sie REINDEX .