当前位置:   article > 正文

MVCC实现原理_mvcc什么时候生效

mvcc什么时候生效

MVCC是什么

        MVCC,Multi-version Concurrency Control多版本并发控制。是一种用来解决读写冲突的无锁并发控制。他通过为事务分配单项增长的时间戳,为每个修改保存一个版本。版本与事务时间戳相关联。读操作只读该事务开启之前的数据库的快照。所以MVCC可以为数据库解决以下问题:
        1、在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作时也不用阻塞读操作。提高了数据库并发读写的性能。
        2、能够解决脏读、不可重复读,以及一定程度的幻读等事务隔离性问题。但是不能够解决数据更新丢失的问题以及不能完全解决幻读的问题。

        MVCC只在事务隔离级别为RC和RR的时候生效。

MVCC主要依赖于三个隐藏字段,undolog和read view来实现的。

MVCC中存在三个隐藏字段:

在这里插入图片描述
事务每次开启前都会有从数据库获得一个自增长的事务id trx_id,MVCC通过事务的id判断事务的先后顺序。

undolog日志

        undolog日志记录了数据被修改前的信息。在表记录修改之前,会先把数据拷贝到undo log里,如果事务回滚,即可以通过undo log来还原数据

undo log细分为两种,insert时产生的undo log、update,delete时产生的undo log。

在Innodb中insert产生的undo log在提交事务之后就会被删除,因为新插入的数据没有历史版本,
所以无需维护undo log。

update和delete操作产生的undo log都属于一种类型,在事务回滚时需要,而且在快照读时也需要,
则需要维护多个版本信息。只有在快照读和事务回滚不涉及该日志时,对应的日志才会被purge线程统一删除。

原文链接:https://blog.csdn.net/jinwufeiyang/article/details/119578180
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

read view

        用来保证多个并行的事务之间能否读取到彼此的数据。

        当一个事务执行读操作时会产生一个读视图。这里的视图分为两种情况。RC(读已提交)会在每一次读操作时都会生成一个新的读视图,RR(可重复读)只会在第一次查询时生成读视图,之后的查询都是根据第一次查询的视图返回结果。

Read View是如何保证可见性判断的呢?Read View是如何保证可见性判断的呢?
        Read View中存在三个全局属性:
                1、trx_list:一个数值列表,用来维护ReadView生成时刻正在活跃的事务id
                2、up_limit_id:记录trx_list中的最小的事务id
                3、low_limit_id:生成时刻,系统尚未分配的下一个事务的id
在这里插入图片描述

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号