PostgreSQL 怎么通过vacuum 加速事务ID回收的速度 (翻译)

优化PostgreSQL事务ID回收:自动真空与手动操作策略

643a2868d6ec91fe5a1c848aea9f09dc.png

此文为翻译文字原文连接在文字最下方

经历上次transaction id 回收报警的问题后,除了上次总结后,发现对于transaction id 的回收的问题还是处于一个急需在学习的过程,所以有了下面这篇翻译的文字。

翻译

——————————————————————————————

Postgresql 使用事务ID (txids,xids)去完成多版本控制的功能设计,相关的postgresql文档中有明确的对于 txids 的功能注解:

PostgreSQL 的 MVCC 事务的实现是依赖于比较事务ID XID 的数字来完成的,这里插入的行版本信息XID要大于当前的行事务XID ,并且当前的XID 信息在未来是不应该被可见的。 

基于transaction ID 被限制在 32位的基础上,一个PG的数据库在运行一段时间,将遇到事务ID 的回卷的问题,XID计数器环绕到零,突然之间,过去的事务出现在未来,简而言之,出现了灾难性的数据丢失问题。

为了克服事务ID回卷的问题,PG 使用VACUUM 来冻结已经已经提交的事务的ID,并且并且在未来可能会释放并重新使用这些  transaction id.

Vacuum 被放到后台运行自动运行并且这里我们称之为 autovacuum 自动真空,当然也可以通过手动的 vacuum来完成类似的功能。

Autovacuum 被设计为一个低优先级的定期的任务,实际的工作效果和工作的速度和数据库本身的活动有关。在有些情况下,autovacuum 可能不能够回收事务的ID,或者不及时的回收这些ID,并且这种vacuum 工作我们也对其有一个称呼 , aggressive vacuum 或者  antiwraparound vacuum.

如果TXID 的利用率超过了回收的速度,尽管 autovacuum 做了最大的努力去工作,达到一定的程度后,数据库将停止接受数据库的操作命令,避免因为事务回卷导致的数据丢失的问题发生。

下面将介绍的是通过vacuum 的功能来解决这个问题,那么基于的数据库版本是PG12, 所以下面的命令和执行必须基于PG12的版本。

Autovacuum versus manual vacuum for TXID freezing  (针对事务ID 的冻结,自动真空与手动真空的不同)

以下的信息主要标明 vacuum 的操作步骤,这

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值