我在这里找到了我们如何在 SQL Server 中解决这个问题- 但我如何在 PostgreSQL 中解决这个问题?
问问题
11363 次
2 回答
12
通常,您根本不必担心这一点。
但是,如果发生了大规模删除或更新,或者持续更改率如此之高以至于 autovacuum 无法跟上,那么您最终可能会得到一个严重臃肿的索引。
确定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 创建的,也就是说,索引块的填充率不会超过 90% INSERT
。
指数何时膨胀很难说,但如果leaf_fragmentation
超过 50-60,就不是那么漂亮了。
要重新组织索引,请使用REINDEX
.
于 2018-09-21T17:27:16.173 回答
3
使用 PostgreSQL 索引碎片整理通常应该由Autovacuum 守护进程自动处理。如果您不使用 autovacuum 守护程序,或者它无法跟上,您始终可以重新索引有问题的索引。
确定哪些索引可能被严重碎片化并不是特别简单,并且在这篇博文和这篇 PostgreSQL wiki 文章中进行了详细讨论。
于 2018-09-21T14:50:05.353 回答