我有一个postgresql表,它是“冻结的”,即没有新的数据进入它。这张表严格用于阅读目的。该表包含约17M条记录。该表有130列,可以通过多种不同的方式查询。为了加快查询速度,我为可以使用的筛选器的所有组合创建了索引。我一共有265个索引在桌子上。每个索引约为1.1GB。这使得表的总大小大约为265 GB。我也用吸尘器吸过桌子。
问题
发布于 2020-06-07 12:16:32
如果您的表或索引臃肿,那么VACUUM FULL tablename可能会收缩它们。但如果它们不膨胀,那就没有任何好处了。这不是良性操作,它将锁定表一段时间(需要重建数百个索引,可能需要很长时间),并生成大量IO和WAL,其中最后一个将对副本特别麻烦。所以我会在一个非生产的克隆上测试它,看看它实际上缩小了一些东西,看看你需要声明多长时间的维护窗口。
除此之外,在选择索引时要更加明智。您是如何获得“所有可用于筛选器的组合”的列表的?是通过检查源代码,还是一个接一个地处理缓慢的查询,直到您的慢查询用完为止?也许您可以查看几天间隔的pg_stat_user_indexes快照,看看是否所有的快照都被实际使用了。
这些主要是两列索引吗?
https://stackoverflow.com/questions/62243874
复制相似问题