首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GIN索引没有自动清空

GIN索引没有自动清空
EN

Stack Overflow用户
提问于 2021-03-23 00:51:06
回答 2查看 96关注 0票数 1

我有一个带有2个GIN索引的小表( gin_idx1和gin_idx2)。在我们的工作运行期间,表大小从50 GB增长到大约1GB高的DML活动。工作完成后,自动真空清除表大小和gin_idx1大小。但gin_idx2一直在增长。使用sql查找索引使用情况--我看到的未用指数没有使用gin_idx2。我们使用的是PG12.4,到目前为止,表大小是50 PG,gin_idx1是20 PG,gin_idx2是20 PG。我知道重新索引将修复它,但为什么自动真空能够处理1 gin指数,而不是另一个。这是某种错误还是一种预期的行为?有什么想法?解释?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-23 02:50:03

预期的行为是,自动真空不会收缩表和索引,因此您的gin_idx2正在按预期操作。

如果其他对象收缩,那肯定是因为您正在运行的DELETEs恰好在关系结束时空块。在这种情况下,自动真空将截断那些终端空页。

票数 0
EN

Stack Overflow用户

发布于 2021-03-23 21:47:34

Autovac从不缩小索引,即使从其表中删除所有元组也是如此。因此,不应该是小型索引正在增长,然后就不会缩小,而是通过空间重用来阻止它变得更大。

使用GIN索引(与Btree索引不同),一旦一个值被插入索引,它就永远不会被删除,即使没有活的元组再拥有这个值了。

因此,如果一个GIN索引的值集合很小(例如,英语中的单词是从the结构派生出来的),而另一个索引则是通过一组非常大的可能值(例如,包含其他表的主键值的bigint[],一旦删除就永远不会被重用),那么第一个索引将享受高效的空间重用,而第二个索引将具有“永久性”(如果您永远不会用完64位整数)泄漏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66755779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档