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

Hvordan finder man ud af fragmenterede indekser og defragmenterer dem i PostgreSQL?

Normalt behøver du slet ikke bekymre dig om det.

Men hvis der har været en massesletning eller opdatering, eller den vedvarende ændringshastighed var så høj, at autovakuum ikke kunne følge med, kan du ende med et stærkt oppustet indeks.

Værktøjet til at bestemme, at id'en pgstattuple udvidelse:

CREATE EXTENSION pgstattuple;

Så kan du undersøge indeksbloat sådan her:

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

Dette indeks er i fremragende stand (aldrig brugt):Det har kun 14 % oppustethed.

Husk, at indekser som standard oprettes med en fillfactor af 90, det vil sige, at indeksblokke ikke udfyldes til mere end 90 % af INSERT .

Det er svært at sige, hvornår et indeks er oppustet, men hvis leaf_fragmentation overstiger 50-60, er det ikke så kønt.

For at omorganisere et indeks, brug REINDEX .



  1. Håndtering af transaktioner i MySQL

  2. Hvordan udlæser kombinerede resultater fra to MySQL-tabeller ved hjælp af PDO

  3. Hvordan man kender relationer mellem tabeller

  4. ORDER BY ignoreret ved INSERT i MySQL-tabel