openGauss数据库Commit Sequence Number(CSN)解析

本文详细解释了openGauss数据库中的CommitSequenceNumber(CSN)概念,它是用于模拟内部时序的逻辑时间戳,与Oracle的SCN相似。文章讨论了CSN日志如何决定事务状态,以及openGauss采用基于逻辑提交时间戳的可见性判断,相对于PostgreSQL的改进。特别提到在高并发OLTP环境中,openGauss可能在性能上更具优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

openGauss 数据库 Commit Sequence Number(CSN)解析

openGauss 数据库中 Commit Sequence Number 简称 CSN,使用一个全局自增的长整数作为逻辑的时间戳,模拟数据库内部的时序,与 ORACLE 中的 SCN 类似,该逻辑时间戳被称为提交顺序号。每当一个事务提交的时候,在提交序列号日志中(CSN LOG)会记录该事务号 XID(事务的全局唯-标识)对应的逻辑时间戳(CSN 值)。

CSN 日志中记录的 XID 值与 CSN 值的对应关系,即决定了所有事务的状态函数 f(t)。

如图所示,在一个事务的实际执行过程中,并不会在开始就加载全部的 CSN 日志,而是在扫描到某条记录以后,才会去 CSN 日志中查询该条记录头部 xmin 和 xmax 这两个事务号对应的 CSN 值,并基于此进行可见性判断。称为基于逻辑提交时间戳的可见性判断。是对 PG 中可见性判断时查询活跃事务组的改进。

PG 的可见性判断如下:

PG 在获取查询快照时需要获取活跃事务列表,openGauss 虽然不用获取活跃事务列表,但在读取 tuple 后需要查询 XMIN,XMAX 对应的 CSN。哪种方式更高效个人还没有搞清楚,可能 openGauss 在高并发的事务处理时更有优势,因为 OLTP 环境中活跃事务较多,并且多数基于索引的查询,需要 XMIN,XMAX 转 CSN 的记录很少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值