【问题标题】:Speed up autovacuum in Postgres加快 Postgres 中的 autovacuum
【发布时间】:2021-04-01 18:22:08
【问题描述】:

我有一个关于 Postgres 自动真空/真空设置的问题。 我有一个包含 45 亿行的表,并且有一段时间进行了大量更新,导致大约 15 亿个死元组。此时 autovacuum 需要很长时间(几天)才能完成。 在查看 pg_stat_progress_vacuum 视图时,我注意到:

max_dead_tuples = 178956970

导致多次索引重新扫描 (index_vacuum_count)
根据docs - max_dead_tuples 是我们可以在需要执行索引清理周期之前存储的死元组数量,基于maintenance_work_mem。
根据this,一个死元组需要 6 个字节的空间。
所以 6B x 178956970 = ~1GB
但我的设置是

maintenance_work_mem = 20GB
autovacuum_work_mem = -1

那么我错过了什么?为什么我所有的 1.5b 死元组都不适合 max_dead_tuples,因为 20GB 应该提供足够的空间,为什么需要多次运行?

【问题讨论】:

    标签: postgresql postgresql-12 vacuum autovacuum


    【解决方案1】:

    一个VACUUM循环中的死元组数量硬编码限制为1GB,请参阅the source

    /*
     * Return the maximum number of dead tuples we can record.
     */
    static long
    compute_max_dead_tuples(BlockNumber relblocks, bool useindex)
    {
        long        maxtuples;
        int         vac_work_mem = IsAutoVacuumWorkerProcess() &&
        autovacuum_work_mem != -1 ?
        autovacuum_work_mem : maintenance_work_mem;
    
        if (useindex)
        {
            maxtuples = MAXDEADTUPLES(vac_work_mem * 1024L);
            maxtuples = Min(maxtuples, INT_MAX);
            maxtuples = Min(maxtuples, MAXDEADTUPLES(MaxAllocSize));
    
            /* curious coding here to ensure the multiplication can't overflow */
            if ((BlockNumber) (maxtuples / LAZY_ALLOC_TUPLES) > relblocks)
                maxtuples = relblocks * LAZY_ALLOC_TUPLES;
    
            /* stay sane if small maintenance_work_mem */
            maxtuples = Max(maxtuples, MaxHeapTuplesPerPage);
        }
        else
            maxtuples = MaxHeapTuplesPerPage;
    
        return maxtuples;
    }
    

    MaxAllocSizesrc/include/utils/memutils.h 中定义为

    #define MaxAllocSize   ((Size) 0x3fffffff) /* 1 gigabyte - 1 */
    

    您可以在 pgsql-hackers 列表上游说以增加限制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      相关资源
      最近更新 更多