博客
关于我
xmin、xmax、cmin、cmax
阅读量:376 次
发布时间:2019-03-05

本文共 597 字,大约阅读时间需要 1 分钟。

作者:瀚高PG实验室 (Highgo PG Lab)

在PostgreSQL事务处理中,数据库内部维护了四个字段(xmin、xmax、cmin、cmax)来控制数据行的可见性。这些字段的作用是跟踪数据行的版本信息,确保在多版本并发控制(MVCC)机制下,事务之间能够正确地处理数据变化。

新插入的一行数据会记录当前的事务ID到xmin字段,而xmax则初始化为0。这种设计意味着,插入操作会生成一个新的数据版本,并与之前版本区分开来。

在修改操作中,PostgreSQL采用了“插入新版本,标记旧版本为已删除”的机制。具体来说,原有的数据行会在其xmin字段中保留原有的事务ID,而xmax字段会被更新为当前的事务ID。同时,新插入的数据行会以当前的事务ID作为xmin值,而xmax则初始化为0。这样,旧版本的数据行仍然可以被其他事务读取,但不会被新的修改操作所影响。

在删除操作中,PostgreSQL会将被删除的数据行的xmax字段设置为当前的事务ID。这种方式可以确保,如果在同一事务中对一行数据进行多次修改,删除操作不会影响之前的版本。

通过以上机制,xmin字段标记的是数据行的插入版本,而xmax字段标记的是数据行的删除版本。cmin和cmax字段则用于判断同一事务内的不同命令是否导致了数据行的版本变化。这种设计保证了事务处理的原子性和一致性,使得并发事务能够正确地隔离和恢复。

转载地址:http://qiowz.baihongyu.com/

你可能感兴趣的文章
vimscript学习笔记(三)信息打印
查看>>
awk杂谈之数组习题
查看>>
SSM项目中遇到Could not autowire. No beans of ‘XXX‘ type found.错误
查看>>
Linux网络属性配置详解
查看>>
Python(三十)类的理解
查看>>
Extjs布局详解
查看>>
Android数据库
查看>>
HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
查看>>
keil左侧文件调整方法
查看>>
本地分支关联远程分支
查看>>
STM8 GPIO模式
查看>>
STM32boot启动
查看>>
回调函数(callback function)
查看>>
omnet++
查看>>
23种设计模式一:单例模式
查看>>
Qt中的析构函数
查看>>
CSharp中委托(一)委托、匿名函数、lambda表达式、多播委托、窗体传值、泛型委托
查看>>
二叉堆的c++模板类实现
查看>>
C语言实现dijkstra(adjacence matrix)
查看>>
用C#实现封装-徐新帅-专题视频课程
查看>>