2PC 提交版本号问题

【 使用版本 】4.1
【问题描述】

事务的 全局提交版本号 (global commit version,即 commit version)是由所有分区本地提交版本号的最大值决定的. 参与者中的每一个分区取本地 最大读时间戳 作为本地提交时间戳

这里说的事务的 `全局提交版本号,是在2pc prepare完成后,确定的事务提交版本号吗?这个版本号是取得GTS吧?为何还要所有分区本地提交版本号的最大值决定的,GTS难道不是大于所有所有分区本地提交版本号吗?
直接用GTS分配的时间戳为什么不可以?

https://open.oceanbase.com/learning
在oceanbase原生分布式一体化架构原理的OceanBase 数据库的并发控制模型一章节中有对应的解释

我贴的图就是这个并发控制模型章节的内容啊,没有看到解释

回答能否解释的清楚一些,别甩个文档链接
或者请把解释的内容贴个图?

  1. 这里说的事务的 `全局提交版本号,是在2pc prepare完成后,确定的事务提交版本号吗?
    全局提交版本号,是在2pc prepare完成后,确定的事务提交版本号
  2. 这个版本号是取得GTS吧?
    这个版本号不一定取得GTS,这个版本号是取最大读时间戳和 GTS 最大值
  3. 为何还要所有分区本地提交版本号的最大值决定的,GTS难道不是大于所有所有分区本地提交版本号吗?
    在并发场景下,其他事务的提取会获取到取到了更大的 GTS,导致需要被阻塞等待前一GTS所在事务的提交,在事务之间不冲突的场景下会降低并发
    4.直接用GTS分配的时间戳为什么不可以?
    如果使用了 GTS 这样一个固定的值, 并发的读取(取到了更大的 GTS)需要有办法卡住, 这个会降低并发能力,因此我们使用了最大读时间戳, 不卡住并发的读取, 而使得版本号同时考虑他们
1 个赞

你的态度我都看不下去了