sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur tar man reda på fragmenterade index och defragmenterar dem i PostgreSQL?

Normalt behöver du inte oroa dig för det alls.

Men om det har skett en massradering eller uppdatering, eller om den ihållande förändringshastigheten var så hög att autovakuum inte kunde hänga med, kan du sluta med ett kraftigt uppsvällt index.

Verktyget för att bestämma det ID:t pgstattuple tillägg:

CREATE EXTENSION pgstattuple;

Sedan kan du undersöka index bloat så här:

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

Detta index är i utmärkt skick (aldrig använt):Det har endast 14 % uppblåsthet.

Tänk på att index som standard skapas med en fillfactor av 90, det vill säga indexblock fylls inte till mer än 90 % med INSERT .

Det är svårt att säga när ett index är uppsvällt, men om leaf_fragmentation överstiger 50-60, det är inte så vackert.

För att omorganisera ett index, använd REINDEX .



  1. Få SELECT-resultat sorterade efter rad-id i mySQL

  2. När ska jag använda MySQLi istället för MySQL?

  3. CONTAINS fungerar inte med Oracle Text

  4. Förhindra mysql casting sträng till int in where-klausul