mysql 的mvcc 作用和原理

2023-09-06  本文已影响0人  玖柒叁

mysql 的mvcc 作用

Mysql有四种隔离级别,分别是读未提交、读已提交、可重复读和串行化。mvcc可以实现读已提交和可重复读。对于读已提交,mvcc会在每次查询时生成ReadView快照,而对于可重复读会在第一次查询时生成ReadView快照。

mvcc的实现

mvcc的实现依赖于undo log版本链,和ReadView快照。
undo log中会保存事务的基本信息、当前事务id以及前一个undolog地址,日志与日志之间通过这样的链接形成了版本链。
ReadView快照中包含了正在执行的事务id数组(m_ids)、正在执行事务id的最小值(min_trx_id)、下一个要生成的id(max_trx_id)、创建ReadView的事务id(creator_trx_id)。

如何判断版本链中的某条日志内容是否对当前事务可见

if (trx_id<min_trx_id) {
          该版本对当前事务可见
     } else if (trx_id >= max_trx_id){
          该版本对当前事务不可见
     } else {
          if (m_ids.contains(trx_id)) {
               该版本对当前事务不可见
          } else {
               该版本对当前事务可见
          }
     }
上一篇 下一篇

猜你喜欢

热点阅读