标签:data 聚集 vcc max 检索 查找 返回 sql 查询
mvcc 全称 multiple version concurrency control 多版本并发控制,是数据库领域比较常用的一种非锁并发技术。
mysql 的innodb中,在RR、RC级别会使用mvcc来提升并发。
实现原理:
首先理解几个基本知识点。
一、mysql在行都设置了默认列(对查询不可见),包含有 data_trx_id、data_roll_ptr、db_row_id、delete bit
二、Read View:RR、RC级别,开启事务时,每个事务各自都会维护一份Read View,ReadView 中包含了当前DBMS中活跃的事务id列表(即begin开启了,但未commit的事务),后续简称RV。
三、事务select的检索的规则:
看下具体过程:
当事务级别为默认级别RR时:
假设 有张表
test(bl varchar(20),id not null primary key)
有事务 A、B、C、D 分两个场景来看 RV的关系。
场景1:
RR级别时候,RV不会更新,一直保持开启事务时候生产的RV,RV=[1]当前数据不可用,需要查询历史版本,发现roll_ptr为空,无历史版本,古返回为空。
RC级别时候,每次查询RV会生成新的列表,最终RV为空,故直接返回行数据即可。
场景2 ,表初始数据是 "小明"
RR级别时也是一样,会一直持有同一张RV,RV=[1,2] ,会认为1,2 版本均不可用户,会寻找1,2版本的历史版本,返回值是 小明
RC级别的时候,RV会一直更新,RV=[2]会查找2的历史版本 trx_id=1的提交记录,小明1,以此类推。
能看出来 mysql innoDB实现的并不是纯粹的MVCC 模式,其中还加入了X锁。严格来讲应该是 “X锁+MVCC”来达到MVCC的目的。
标签:data 聚集 vcc max 检索 查找 返回 sql 查询
原文地址:https://www.cnblogs.com/luoluoshidafu/p/11528784.html