Postgresql ->xmax xmin
浏览器右上角查看导航按钮>>>>
01, xmin, xmax
在元组的头部记录着2个特殊的标记值,xmin和xmax;xmin表示插入该元组的事务号,xmax表示删除该元组的事务号
02, 理解xmin、xmax
执行select查询时,会首先获取一个数据库快照,该快照也包括xmin和xmax,这里的xmin表示当前已完成的事务的最小id,xmax表示正在执行的事务的最大id,任何小于xmin的事务被认为已完成,任何大于xmax的事务被认为尚未结束;位于xmin与xmax之间的事务可能已经完成,也可能尚未完成,视情况而定。扫描元组时,通过对比元组头的xmin、xmax与快照的xmin、xmax,就可以知道这条元组对当前事务是可见还是不可见了。
Tupxmin、Tupxmax表示元组头的事务号;Snapxmin、Snapxmax表示快照中的事务号
如果 Tupxmin 小于
Snapxmin,说明插入该元组的事务已提交,那么再看Tupmax是不是也小于Snapxmin,如果Tupmax也小于Snapxmin,说明删除该元组的事务已提交,那么这条元组不可见;如果Tupmax大于Snapxmin,说明删除该元组的事务还未提交,那么这条元组可见。
判断事务号是否在快照中的方法:
1)如果事务号小于快照中的xmin,那么事务不在快照中;
2)如果事务号大于快照中的xmax,那么事务在快照中;
3)如果事务号在快照的xmin和xmax之间,那么扫描快照中的活动事务,如果扫描到了,那么事务在快照中,否则事务不在快照中。
03,隐藏的系统列
1.oid
oid是object identifier的简写,其相关的参数设置default_with_oids设置一般默认是false,或者创建表时指定with (oids=false),其值长度32bit,实际的数据库系统应用中并不能完全保证其唯一性;
2.tableoid
是表对象的一个唯一标识符,可以和pg_class中的oid联合起来查看
3.xmin
是插入的事务标识符,是用来标识不同事务下的一个版本控制。每一次更新该行都会改变这个值。可以和mvcc版本结合起来看
4.xmax
是删除更新的事务标识符,如果该值不为0,则说明该行数据当前还未提交或回滚。比如设置begin事务时可以明显看到该值的变化
5.cmin
插入事务的命令标识符,从0开始
6.cmax
删除事务的命令标识符,或者为0
7.ctid
是每行数据在表中的一个物理位置标识符,和oracle的rowid类似,但有一点不同,当表被vacuum
full或该行值被update时该值可能会改变。所以定义表值的唯一性最好还是自己创建一个序列值的主键列来标识比较合适。不过使用该值去查询时速度还是非常快的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架