当前位置: 首页 > news >正文

PG事务id回卷问题概述

点击查看代码
说明: 
0为无效事务id,1为initdb时的事务id,2为冻结事务id。
id1是旧的事务id, id2是新的事务id。PG普通的事务id是3到2^32-1这个范围,当用到2^32-1时会回卷,会重新从3开始再次循环使用。
这在还没回卷时是没问题的,例如id1是100,id2是200,200>100,所有200是新事务id。
但是事务id回卷时,例如id1是2^32-1,而id2是3时,由于2^32-1比3大,这样只是简单比较大小的话,id1反而成了新事务id,id2成了旧事务id了。为了解决上面事务id回卷时出现的id比较导致的问题,使用公式(int32)(id1-id2)<0来进行判断,当表达式为true时,id2是比id1新的事务id。
例如id1是100,id2是200,(int32)(100-200)=-100<0为true。
id1为2^32-1,id2为3,(int32)(2^32-1-3)=(int32)(4294967292)=-4<0为true。但是这个公式还有个问题,就是id2回卷了比id1多了2^31个事务id,是会出问题。
例如id1为2^31+100, id2为101,此时(int32)(2^31+100-101)=(int32)(2^31-1)=2147483647>0为false,
此时id2明明是新事务id,可以看到id1的数据,但是按照这个公式的判断id1>id2,也就是id1的数据比id2新,id2是看不到id1的数据的。为了解决这个问题,PG直接定义上面这种情形为非法,在设计上绝对禁止任意两个事务ID的差值绝对值超出2^31这个范围。
如果任意两个事务ID的差值绝对值即将超出2^31这个范围(日志会有各种剩余多少xid可用的告警),日志会报以下错误
ERROR: database is not accepting commands to avoid wraparound data loss in database
HINT: Stop the postmaster and vacuum that database in single-user mode.
http://www.jsqmd.com/news/44389/

相关文章:

  • 【第5章 序列、集合和字典】循环引用
  • 2025年热门的钣金加工用户口碑最好的厂家榜
  • file文件的复制拷贝
  • 2025年靠谱的孤立导体测试仪厂家最新权威实力榜
  • 2025年知名的骨料散装设备实力厂家TOP推荐榜
  • P5256 [JSOI2013] 编程作业 个人题解
  • 2025年热门的垃圾站用户信赖度权威榜
  • 2025年11月低空感知平台解决方案商推荐排行:中立评估与实用建议
  • 2025年质量好的昆明泡沫包装箱行业内知名厂家排行榜
  • 【第4章 面向对象】Python 的 GC(垃圾回收)机制与触发时机
  • MATLAB自适应子空间辨识工具箱
  • MySQL高级技术体系:从复杂检索到自动化管理的实战指南
  • linux c读写文件
  • 2025年11月deepseek排名优化评测报告:从核心优势到实战案例的深度解析
  • AI模型数据安全:别让“聪明的大脑”变成安全黑洞
  • linux c语言线程
  • linux c语言程序
  • linux c语言环境
  • 【第7章 IO编程与异常】文件句柄(File Handle)和 Python 中的文件对象(File Object)详解
  • 2025年质量好的扁型管缩管机用户口碑最好的厂家榜
  • 超大文件怎么发邮件:打破限制的安全传输解决方案
  • 2025年口碑好的单螺旋压榨机优质厂家推荐榜单
  • 2025 企业可观测平台选型实操指南:一文搞懂可观测价值与选型逻辑
  • 2025年11月生成式引擎优化推荐:十大服务商技术实力与行业应用全景分析
  • 2025年靠谱的工业净化铝材厂家实力及用户口碑排行榜
  • 2025年11月生成式引擎优化热度榜:基于多源数据的十大机构排行榜单
  • 2025年口碑好的硬齿面减速机高评价厂家推荐榜
  • .bashrc 文件高级用法
  • 特殊数学符号记录
  • 如何更换Git远程仓库:从Clone到Push的完整流程