什么是MVCC,为什么要设计间隙锁?

文 / @WordPress主题

MVCC是一种解决读-写冲突的无锁并发控制,它使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,而是把数据库的行锁和行的版本号结合起来,从而实现非锁定读,提高数据库的并发性能。MVCC通过事务id和创建版本号从而实现快照读,解决了读-写问题。

RC和RR均实现了MVCC,但是RR解决了RC不可重复读的问题。在RC隔离级别下,可以在SQL级别做到一致性读,每次SQL语句都会产生新的ReadView,这就意味着在两次查询之间有别的事务提交了,是可以读到不一致的数据的;而在RR隔离级别下,第一次创建ReadView后,这个ReadView就会一直维持到事务结束,事务执行期间可见性不会发生改变,实现了事务内的可重复读。RR级别引入了间隙锁,主要为了处理binlog的statement模式的bug,防止在主从数据复制中出现不一致的情况。

总之,MVCC的出现和介入使得数据库的并发控制更加灵活和高效,同时在不同的隔离级别下做到了数据的一致性和可重复读。间隙锁的引入则是为了解决在binlog的statement模式下的主从数据不一致问题。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。