请教关于 MVCC ReadView 的问题

2021-03-12 22:20:15 +08:00
 zxCoder

这两个值,是max_trx_id=creator_trx_id+1 吗?那特意将两个值分开定义只是为了方便阅读吗?

max_trx_id:表示生成 ReadView 时系统中应该分配给下一个事务的 id 值。
creator_trx_id:表示生成该 ReadView 的事务的 事务 id 。
1038 次点击
所在节点    数据库
6 条回复
pedia
2021-03-12 22:49:41 +08:00
max_trx_id 是 trx_sys 里的 这是全局的
creator_trx_id 是 read view 里的
zxCoder
2021-03-12 22:56:51 +08:00
@pedia 大佬再请教个问题 也是关于这个 ReadView,书上说

“如果被访问版本的 trx_id 属性值大于 ReadView 中的 max_trx_id 值,表明生成该版本的事务在当前事务生成 ReadView 后才开启,所以该版本不可以被当前事务访问”

那等于呢? max_trx_id 肯定是大于 creator_trx_id 的,那按理说也是在生成该版本的事务在当前事务生成 ReadView 后才开启的,那为什么不能在这里判断呢?而是要看下一个条件:

"如果被访问版本的 trx_id 属性值在 ReadView 的 min_trx_id 和 max_trx_id 之间,那就需要判断一下
trx_id 属性值是不是在 m_ids 列表中,如果在,说明创建 ReadView 时生成该版本的事务还是活跃的,该
版本不可以被访问;如果不在,说明创建 ReadView 时生成该版本的事务已经被提交,该版本可以被访问。"
pedia
2021-03-12 23:09:07 +08:00
@zxCoder 我不确定我是否正确的理解了你的问题.

你说的那种情况下: 无法保证后启动的事务先 commit.

t1 t2 两个事务, t1 先启动 ,但早于 t2 commit.
pedia
2021-03-12 23:56:26 +08:00
@zxCoder 我理解你的意思了 我看了一下源码 大于等于都是不可见的 你看的书描述不准确.
pedia
2021-03-13 00:07:53 +08:00
@zxCoder 当然 欢迎在数据库社区提问关于数据库内核的问题 https://fastdb.cc/
zxCoder
2021-03-13 08:21:26 +08:00
@pedia 懂了 非常感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/761185

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX