PostgreSQL的vacuum流程

本文详细介绍了PostgreSQL的vacuum过程,包括其在删除死元组、冻结事务标识、释放磁盘空间和更新统计信息等方面的作用。vacuum分为并发清理和完整清理两种模式,通过可见性映射(VM)提高效率。冻结过程有惰性模式和迫切模式,确保数据库的稳定运行。
摘要由CSDN通过智能技术生成

作者:阎书利

vacuum是一种维护过程,有助于PostgreSQL的持久运行,它的两个主要任务是删除死元组,以及冻结事务标识。

vacuum的作用:

1.释放,再利用更新/删除的行所占据的磁盘空间。
2.更新postgresql查询计划中使用的统计数据。
3.防止因事务ID的重置而使非常老的数据丢失。

并发清理过程为指定的表或者数据库中的表执行以下任务:

第一部分
1.从指定的表中依次处理每一张表,
2.获取表上的ShareUpdateExclusiveLock锁(该锁允许其他事物对该表进行读取)。
3.扫描表中的所有页面,获取所有的死亡元组,(死元组的列表存储在本地内存的maintenance_work_mem里)
4.如果有必要,冻结旧的元组的事务标识
5.移除指向死亡元组的索引元组

第二部分
1.移除每一页中的死亡元组,并对每一页内的的活元组进行碎片整理,重排本页的活元组
2.更新已经处理的空闲空间映射(FSM)和可见性映射(VM)
PG会不断执行这个过程直至最后一页

第三部分
1.如果最后一个页面没有任何元组,则截断最后一页
2.更新与冻结事务标识相关的系统视图(pg_class与pg_database)
3.释放ShareUpdateExclusiveLock锁

第四部分
1.更新一些统计信息(pg_stat_all_tables等)
2.移除不必要的提交日志文件,移除CLOG(10版本及以后为xact)中的非必要文件与页面
(当更新p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值