我已经找到了如何在SQL Server here中解决此问题的方法-但是我如何在PostgreSQL中做到这一点?
答案 0 :(得分:2)
通常,您完全不必担心。
但是,如果进行了大规模删除或更新,或者持续的更改率如此之高,以至于自动真空无法跟上,您的索引最终可能会肿。
确定ID为pgstattuple
扩展名的工具:
CREATE EXTENSION pgstattuple;
然后您可以像这样检查索引膨胀:
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
该指数表现出色(从未使用):膨胀率仅为14%。
请注意,默认情况下创建的索引fillfactor
为90,也就是说,INSERT
不会将索引块填充到90%以上。
很难说索引何时膨胀,但是如果leaf_fragmentation
超过50-60,就不会那么漂亮了。
要重组索引,请使用REINDEX
。
答案 1 :(得分:1)
对于PostgreSQL索引,碎片整理通常应由Autovacuum daemon自动进行。如果您不使用autovacuum守护程序,或者它无法跟上,则可以随时reindex problematic indexes。
确定哪些索引可能会严重碎片化并不是特别简单,this blog post和in this PostgreSQL wiki article中对此进行了详尽的讨论。