本文简单介绍了PG中的快照、何时创建以及可见性
背景知识
PG中每条数据都记录了事务相关的信息:
- t_xmin, 创建该条数据的事务id
- t_xmax, 删除该条数据的事务id
事务id时顺序增长的整数,后创建的事务id比新创建的事务id大,快照的作用就是提供一个静态的视图,控制数据的可见性,它定义了哪些数据对哪些事务可见,对哪些事务不可见。
事务的状态有四种:
- 正在执行
- 已提交,
- 已回滚
- 子事务已提交
快照的组成
快照由一些事务id组成,这些事务id分为三部分xmin:xip:xmax
- xmin表示创建快照时活跃的最小事务id
- xip表示创建快照时所有活跃的事务id(猜测xip意思时x in progress)
- xmax表示创建快照时最小未使用的事务id
由于事务id时顺序增长的整数,数值大的表示后面发生(不考虑wraparound),所以上面三个部分体现在时间轴就是下面这样:
可以看到,这三部分事务id把所有的事务分成了已完成的事务、未完成的事务和未开始的事务,结合快照与数据中的t_xmin和t_xmax信息就能判断快照中数据的可见性。