【问题标题】:Do I need autovacuum for INSERT's-only partitioned table?INSERT 的唯一分区表是否需要 autovacuum?
【发布时间】:2021-12-17 12:30:56
【问题描述】:

我使用 PG13 和 timescaledb 2.4。我有一张大桌子,保留政策为 1 周。有大量的 INSERT,一些 SELECT,没有 UPDATE/DELETE。 1 周后,我想块被丢弃了。

这个空间需要抽真空吗?为什么 timescaledb-tune autovacuum 设置如此激进?

autovacuum_naptime = 10
autovacuum_max_workers = 10

我可以为此表禁用自动清理吗?

【问题讨论】:

    标签: postgresql timescaledb


    【解决方案1】:

    您永远不应该禁用自动清理。正确配置它。一方面,禁用 autovacuum 也会禁用 autoanalyze,你最终会得到糟糕的执行计划和糟糕的查询。

    如果您从不使用UPDATEDELETE,并且您的数据不会存在很长时间,那么运行 autovacuum 的原因只有一个:获得有效的仅索引扫描。 VACUUM 维护“可见性地图”,仅索引扫描只有在大多数块被标记为“全部可见”时才有效。

    如果您不需要仅索引扫描,并且您正在运行 v13 及更高版本,则可以通过将 autovacuum_vacuum_insert_threshold 设置为 -1 来禁用 autovacuum。

    autovacuum_naptime 设置为 10 是愚蠢的,但如果您有很多分区,则增加autovacuum_max_workers 是有意义的。即使您不需要VACUUM,您也可能需要自动清空ANALYZE 很多分区。

    【讨论】:

    • 感谢您的回答。我完全使用仅索引扫描。你对 autovacuum_naptime 有什么建议?
    • @LaurenzAlbe 没关系,我只看到了数据库配置变量的链接,没有意识到您也可以将它们设置为storage parameters
    猜你喜欢
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多