滁州seo网站推广方案,建设银行上海黄浦支行网站,设计培训学院,专注网站建设怎么样文章目录MVCC是什么MVCC的作用MVCC的实现原理Read View是什么Read View如何判断某个版本可以访问MVCC是什么
MVCC(Multiversion concurrency control)是同一行数据保留多版本的一种方式#xff0c;进而实现并发控制。 在查询时#xff0c;通过read view和版本链找到对应版本…
文章目录MVCC是什么MVCC的作用MVCC的实现原理Read View是什么Read View如何判断某个版本可以访问MVCC是什么
MVCC(Multiversion concurrency control)是同一行数据保留多版本的一种方式进而实现并发控制。 在查询时通过read view和版本链找到对应版本的数据。
MVCC的作用
提升并发性能。对于高并发场景MVCC比行级锁开销更小
MVCC的实现原理
MVCC的实现依赖于版本链版本链通过表的三个隐藏字段实现
DB_TRX_ID当前事务id唯一DB_ROLL_PRT回滚指针指向当前行记录的上一个版本DB_ROW_ID主键如果数据表没有主键InnoDB会自动生成主键
表的某一行记录示例
它表示id1name张三age19的这条行记录是由事务id10的事务创建/修改
Read View是什么
read view可以理解为将数据在每个时刻的状态拍成“照片”记录下来。当需要获取时刻t的数据时就从t时间拍的”照片“上获取数据。 Read View结构
Read View如何判断某个版本可以访问 trx_id creator_trx_id修改这条行记录的事务如果和创建Read View也就是查询这条行记录的事务是同一个事务那么就可以访问这个版本的行记录数据。trx_id min_trx_id行记录的事务id比未提交的最小事务id还要小。说明修改该行记录的事务已经提交。该版本的事务可以被当前事务读取到。trx_id max_trx_id说明当前版本的事务是在生成Read View之后才产生当前事务无法访问。min_trx_id trx_id max_trx_id 如果在m_ids中存在trx_id说明是未提交的事务不可访问不存在说明trx_id已经提交了可以访问。
例如 有如下两个事务 事务id20的事务将id1的行记录的name先改成李四然后改成王五。 事务id60的事务对其他表进行一些操作。
此时进行查询select * from users where id 1生成的Read View如下图 此时未提交的事务有20和60所以m_ids为[20,60] 生成该Read View的是查询语句所以creator_trx_id0一个事务只有对数据库的数据进行修改操作增删改的时候才会为事务分配一个唯一事务id查询操作的事务没有进行对数据进行修改操作所以trx_id就是默认的0
将行记录的每个版本的trx_id与时间轴对比判断此版本是否可以访问
此时查询能查询到的数据应该是name“张三”原因如下表
nametrx_id creator_trx_idtrx_id min_trx_idtrx_id max_trx_idmin_trx_id trx_id max_trx_id结果王五符合但在m_ids中无法访问李四同上无法访问张三符合可以访问