lambda Asked: 2022-02-15 22:08:50 +0800 CST2022-02-15 22:08:50 +0800 CST 2022-02-15 22:08:50 +0800 CST 在 PostgreSQL 中的自动清理/清理期间会发生什么? 772 这里的官方文档对我来说似乎很神秘。https://www.postgresql.org/docs/13/routine-vacuuming.html#AUTOVACUUM 有人可以解释一下在自动真空或手动触发真空期间发生了什么吗? postgresql vacuum 1 个回答 Voted Best Answer Laurenz Albe 2022-02-15T23:06:28+08:002022-02-15T23:06:28+08:00 autovacuum 启动器进程会定期唤醒,并根据和某些参数设置中的统计数据pg_stat_all_tables确定pg_class是否需要VACUUMed 或ANALYZEd. 如果是,它会启动一个执行所需操作的 autovacuum 工作进程。 VACUUM做很多事情。基本程序是: 扫描表中的死行版本 扫描所有索引并删除对这些死行版本的引用 再次扫描表,去除第一步发现的死行版本 如果我们还没有完成表格,请重复整个过程 另一方面,它也做这些事情: 更新表中的统计信息pg_class 更新“可用空间图”,让INSERTs 和UPDATEs 知道在哪里可以找到有足够可用空间的块 更新“可见性地图”,以便 PostgreSQL 可以执行高效的仅索引扫描 “冻结”所有超过特定年龄的活动行,以允许事务 ID 计数器回绕而不会丢失数据
autovacuum 启动器进程会定期唤醒,并根据和某些参数设置中的统计数据
pg_stat_all_tables
确定pg_class
是否需要VACUUM
ed 或ANALYZE
d. 如果是,它会启动一个执行所需操作的 autovacuum 工作进程。VACUUM
做很多事情。基本程序是:扫描表中的死行版本
扫描所有索引并删除对这些死行版本的引用
再次扫描表,去除第一步发现的死行版本
如果我们还没有完成表格,请重复整个过程
另一方面,它也做这些事情:
更新表中的统计信息
pg_class
更新“可用空间图”,让
INSERT
s 和UPDATE
s 知道在哪里可以找到有足够可用空间的块更新“可见性地图”,以便 PostgreSQL 可以执行高效的仅索引扫描
“冻结”所有超过特定年龄的活动行,以允许事务 ID 计数器回绕而不会丢失数据