Postgresql数据库为了定时清理因为MVCC引入的垃圾数据,实现了自动清理的机制。[基于pg12]
- autovacuum launcher
- autovacuum worker
其中autovaucuum launcher主要负责调度worker,
autovacuum worker进程进行具体的自动清理工作。
其中 visibility map[vm:PG8.4版本后增加]起到重要作用,通过为每个数据块设置标志位来标记哪些page是没有dead tuple.
好处:
- vacuum 进行扫描时,可以跳过page。
- index-only sacn,可以减少tuple的可见性判断, 减少IO操作. 提高性能。