MVCC背景:MySQL事务默认使用REPEATABLE READ(可重复读)隔离级别。该隔离级别还是会产生幻读问题。即当某个事务读取某个范围的记录时,另外一个事物在该范围插入了新的记录,那么之前的事务再次读取该范围的记录时,会产生幻行。MySQL InnoDB就是通过多版本并发控制(MVCC)解决幻读问题。MVCC简介:MVCC将数据库的行锁与行的多个版本结合起来,只需要很小的开销,就可以实现非锁定读,从而大大提高数据库系统的并发性能.MVCC实现原理:MVCC保存某个时间点上的数据快照。一个事务内,看到的是同一个版本的快照,数据一致。不同事务在同一时间点看到的数据会不一致,因为他们得到的数据版本不一样。InnoDB在每行记录存在额外的隐藏字段,其中一列存储行被更新的版本号,另外一列存储行被删除的版本号。每当一个事务开始的时候,innodb都会给这个事务分配一个递增的版本号,所以版本号也可以被认为是事务号.对于每一个”查询”语句,innodb都会把这个查询语句的版本号同这个查询语句遇到的行的版本号进行对比,然后结合不同的事务隔离等级,来决定是否返回该行。当隔离级别是REPEATABLE READ时,这种策略下,select、delete、 insert、 update语句如何操作:1) SELECT 对于select语句,只有同时满足了下面两个条件的行,才
...
继续阅读
(26)