sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo encontrar índices fragmentados y desfragmentarlos en PostgreSQL?

Normalmente no tienes que preocuparte por eso en absoluto.

Sin embargo, si ha habido una actualización o eliminación masiva, o si la tasa de cambio sostenido fue tan alta que el vacío automático no pudo mantenerse, es posible que termine con un índice muy inflado.

La herramienta para determinar que id el pgstattuple extensión:

CREATE EXTENSION pgstattuple;

Luego puede examinar la hinchazón del índice de esta manera:

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

Este índice está en excelente forma (nunca se usó):solo tiene un 14 % de hinchazón.

Tenga en cuenta que los índices se crean de forma predeterminada con un fillfactor de 90, es decir, los bloques de índice no se llenan en más del 90 % con INSERT .

Es difícil decir cuándo un índice está inflado, pero si leaf_fragmentation excede 50-60, no es tan bonito.

Para reorganizar un índice, use REINDEX .