MySQL归纳总结InnoDB之MVCC原理
本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于InnoDB之MVCC原理的相关问题,MVCC即多版本并发控制,主要是为了提高数据库的并发性能,下面一起来看一下,希望对大家
本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于InnoDB之MVCC原理的相关问题,MVCC即多版本并发控制,主要是为了提高数据库的并发性能,下面一起来看一下,希望对大家有帮助。
MVCC全称Multi-Version Concurrency Control,即多版本并发控制,主要是为了提高数据库的并发性能。同一行数据平时发生读写请求时,会上锁阻塞住。但MVCC用更好的方式去处理读—写请求,做到在发生读—写请求冲突时不用加锁。这个读是指的快照读,而不是当前读,当前读是一种加锁操作,是悲观锁。那它到底是怎么做到读—写不用加锁的,快照读和当前读是指什么?我们后面都会学到。
MySQL在REPEATABLE READ隔离级别下,是可以很大程度避免幻读问题的发生的,MySQL是怎么做到的?
版本链
我们知道,对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列(row_id并不是必要的,我们创建的表中有主键或者非NULL的UNIQUE键时都不会包含row_id列):
trx_id:每次一个事务对某条聚簇索引记录进行改动时,都会把该事务的事务id赋值给trx_id隐藏列。
roll_pointer:每次对某条聚簇索引记录进行改动时,都会把旧的版本写入到undo日志中,然后这个隐藏列就相当于一个指针,可以通过它来找到该记录修改前的信息。
为了说明这个问题,我们创建一个演示表: