postgresql vacuum流程总结

点击查看代码
说明:oldestxmin是表上还在运行的事务中xmin最小的事务id

一、VACUUM正常情况下会以并发清理模式(VACUUM TABLE1;)进行,通过读取VM文件,获取有死元组的页面,清除这些死元组并重排页面内的活元组。

二、FREEZE冻结通常以懒惰模式伴随VACUUM的并发模式一起进行,也是通过读取VM文件,获取有死元组的页面,
	并冻结xmin小于oldestxmin-vacuum_freeze_min_age的元组。
	(没有死元组的页面存在xmin小于oldestxmin-vacuum_freeze_min_age的元组时,不进行处理)
	
三、为了解决(没有死元组的页面存在xmin小于oldestxmin-vacuum_freeze_min_age的元组时,不进行处理)的问题,
	在VACUUM并发模式下达到条件(pg_database.datfrozenxid < oldestxmin-vacuum_freeze_table_age)
	也会以FREEEZE的迫切模式进行冻结元组操作,通过读取VM文件,获取存在没有冻结的元组的页面(即跳过页面里所有元组已冻结的页面),
	冻结所有xmin小于oldestxmin-vacuum_freeze_min_age的元组。
	
四、可以使用VACUUM FREEZE进行冻结表的元组,所有xmin小于oldestxmin的元组都会冻结。

五、可以使用VACUUM FULL TABLE1;进行VACUUM的完整模式,此时表无法访问,并会创建新文件把活元组移过去并删除旧文件。

posted @ 2025-10-29 14:20  夜说  阅读(17)  评论(0)    收藏  举报