这两个值,是max_trx_id
=creator_trx_id
+1 吗?那特意将两个值分开定义只是为了方便阅读吗?
max_trx_id:表示生成 ReadView 时系统中应该分配给下一个事务的 id 值。
creator_trx_id:表示生成该 ReadView 的事务的 事务 id 。
理解错 “事务的开启时刻”和“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 时生成该版本的事务已经被提交,该版本可以被访问。"
1
pedia 2021-03-12 22:49:41 +08:00
max_trx_id 是 trx_sys 里的 这是全局的
creator_trx_id 是 read view 里的 |
2
zxCoder OP @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 时生成该版本的事务已经被提交,该版本可以被访问。" |
3
pedia 2021-03-12 23:09:07 +08:00
|
5
pedia 2021-03-13 00:07:53 +08:00
@zxCoder 当然 欢迎在数据库社区提问关于数据库内核的问题 https://fastdb.cc/
|