摘要:
mysql-innodb-mvcc-锁-分析
InnoDB 中的MVCC
MVCC 是什么
MVCC 的英文全称是 Multiversion Concurrency Control,即多版本并发控制技术。
MVCC 是通过数据行的多个版本管理来实现数据库的并发控制,简单来说它的思想就是保存数据的历史版本。
这样就可以通过比较版本号决定数据是否显示出来,读取数据的时候不需要加锁也可以保证事务的隔离效果。
MVCC可以解决什么
读写之间阻塞的问题,通过 MVCC 可以让读写互相不阻塞,即读不阻塞写,写不阻塞读,这样就可以提升事务并发处理能力。
降低了死锁的概率。这是因为 MVCC 采用了乐观锁的方式,读取数据时并不需要加锁,对于写操作,也只锁定必要的行。
解决一致性读的问题。一致性读也被称为快照读,当我们查询数据库在某个时间点的快照时,只能看到这个时间点之前事务提交更新的结果,而不能看到这个时间点之后事务提交的更新结果。
快照读:快照读读取的是快照数据,不加锁的简单的 SELECT 都属于快照读。
当前读:当前读读取最新数据,而不是历史版本的数据。加锁的 SELECT,或者对数据进行增删改都会进行当前读。
快照读就是普通的读操作,而当前读包括了加锁的读取和 DML 操作。
InnoDB 中实现MVCC
InnoDB 是如何存储记录的多个版本
事务版本号:每开启一个事务,我们都会从数据库中获得一个事务 ID(也就是事务版本号),这个事务 ID 是自增长的,通过 ID 大小