【问题标题】:autovacuum blocking index recreationautovacuum 阻塞索引重新创建
【发布时间】:2020-12-06 14:22:51
【问题描述】:

CentOS 7.9,postgres 9.6.20 我们在我们的 postgres 数据库中发现了我们认为是损坏的索引。这是在生产中,完全把它拉下来不是我们能做的。我们正在努力重新创建索引,但 autovacuum 似乎也无法处理索引。向 autovac pid 发送终止命令将被忽略。 问题是我们如何禁用 autovacuum 足够长的时间来执行索引重新创建?
使问题更加严重的是,我们现在似乎已经达到了交易环绕限制,虽然距离实际限制还有数英里,但这不是一个好地方。

【问题讨论】:

    标签: postgresql indexing postgresql-9.6 autovacuum


    【解决方案1】:

    将该表的 autovacuum_freeze_max_age 提高到 1000000000:

    ALTER TABLE tab SET (autovacuum_freeze_max_age = 1000000000);
    

    这应该会暂时平息 autovacuum,但它仍然是安全的。

    然后终止反环绕自动真空。

    现在您可以创建新索引并删除旧索引。

    然后改回设置:

    ALTER TABLE tab RESET (autovacuum_freeze_max_age);
    

    【讨论】:

    • 这基本上就是我们最终所做的。设置这些参数并在配置中完全关闭 autovac,重新启动服务器(确实需要杀死 autovac 守护程序,因为它没有监听停止信号)。重新索引有问题的索引,重新启动并将 autovac/freeze age 恢复为正常。
    • 请注意,如果autovacuum = off,反环绕自动清理也会运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2015-01-11
    • 2016-08-25
    相关资源
    最近更新 更多