PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como descobrir índices fragmentados e desfragmentá-los no PostgreSQL?


Normalmente você não precisa se preocupar com isso.

No entanto, se houve uma exclusão ou atualização em massa, ou a taxa de alteração sustentada foi tão alta que o autovacuum não conseguiu acompanhar, você pode acabar com um índice muito inchado.

A ferramenta para determinar esse id do pgstattuple extensão:
CREATE EXTENSION pgstattuple;

Então você pode examinar o inchaço do índice assim:
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á em excelente forma (nunca usado):tem apenas 14% de inchaço.

Lembre-se de que os índices são criados por padrão com um fillfactor de 90, ou seja, os blocos de índice não são preenchidos em mais de 90% por INSERT .

É difícil dizer quando um índice está inchado, mas se leaf_fragmentation excede 50-60, não é tão bonito.

Para reorganizar um índice, use REINDEX .