1.mvcc是什么?
多版本并发控制,是MySQL的innoDB引擎实现隔离级别的一种方式,用来实现可重复读和读已提交,由于读未提交总是读取最新的数据,无需使用mvcc,而串行化基于mvcc无法实现,需要加锁;
主要特点是读不加锁,适用于读多写少的情况,因此大多数关系型数据库都实现了mvcc;
2.优点:
对于读不加锁,实现了读的非阻塞,读写不冲突;
3.缺点:
每行数据后都多加了记录字段,存储事务版本号和删除版本号,多耗存储空间
4.mvcc实现(只针对innoDB):
是在每行记录后面冗余两个字段,创建时间版本号(db_trx_id),删除版本号(db_roll_id)
5.从高性能MySQL中可以得知几个mvcc的注意点
a.各大数据库基本都实现了mvcc,只是实现方式各不相同而已,这也可以理解成面向对象编程的接口
b.应对高并发事务,mvcc比加锁更加高效,毕竟不用加锁
c.mvcc只在读已提交和可重复读两个隔离级别下使用,另外两个可以得知不行
d.mvcc是被MySQL中事务引擎innoDB所支持的
e.mvcc可以有乐观锁和悲观锁两种实现方式
f.其实实现方式不是在每行记录多加两个字段,而是三个。。。一会补充
6.快照概念:read view 和快照snapshot
事务快照的实现细节:事务快照用来存储数据库的事务运行情况,一个事务的创建过程可以概括为:
查看当前所有未提交的活跃中的事务,并存储在数组中
选取未提交并活跃中的事务的最小的xid,记录在快照的xmin中(找出最早的一个)
选取所有已提交事务中的最大的xid,加1后记录在xmax中(找出下一个事务的开始版本号)
参考文章地址解释说明
https://segmentfault.com/a/1190000012650596?utm_source=tag-newest
网友评论