mvcc探讨

2019-11-04  本文已影响0人  ljxbbss

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

上一篇 下一篇

猜你喜欢

热点阅读