sql - Postgresql:Autovacuum 分区表

标签 sql postgresql vacuum autovacuum

我们有一个非常大的表,被划分为每月表。我们没有在 postgresql.conf 文件中设置 autovacuum 参数,因此默认情况下使用默认参数。

过去几个月的表table_201404、table_201403一旦通过就不会被写入或更新/删除,仅读取历史数据。为什么我们注意到这些表上运行着 autovacuum 进程?是因为它们是主分区的一部分并且 PostgreSQL 将这些表视为一个分区吗?

我们正在考虑将这些过去的表的 autovacuum_enabled 设置为关闭,但我想首先咨询 Stackoverflow 的智慧。

谢谢大家...

最佳答案

即使是只读表也需要每 20 亿个事务清理一次以进行回绕,并且在默认设置下每 1.5 亿个事务需要清理一次以进行回绕。

每行存储的事务 ID 是 32 位,因此它们最终会回绕。为了防止这引起问题,任何非常旧的 transactionID 都必须替换为一个神奇的值,该值意味着“比所有其他 ID 更旧”。因此必须扫描该表才能进行替换。如果表永远不会改变,最终每个事务 ID 都将被替换为神奇值,并且从概念上讲,该表不再需要被扫描。但这个事实并没有存储在任何地方,因此仍然需要时不时地扫描表,以便系统可以观察到它们仍然正常。幸运的是,扫描是按顺序完成的,只需要读取,不需要写入,所以效率应该相当高。

整个事情可能会在 9.5 中重做,这样就不再需要扫描这样的表了。

关于sql - Postgresql:Autovacuum 分区表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23543141/

相关文章:

sql - Rails 4 ActiveRecord 有很多通过关系无法从 sql 文件读取

sql - 创建串行列时真空表

sql - postgresql 中的真空表

sql - Access 2010 中的 WHERE 区分大小写

c# - 无法解析为有效的类型或函数

sql - 如何计算行组并显示顶部/底部 3 个

postgresql - 进一步加快后缀通配符搜索

json - 嵌套 JSON 的 build_json_object 问题

postgresql - n_dead_tup 与 postgresql 中的 dead_tuple_count?

java - Android 批量插入或更新而不是 insertOrReplace