MVCC(多版本并发控制)
做用:不少状况下能够避免加锁操做,下降开销。
InnoDB下的MVCC并发
经过在每行记录后面保存两个隐藏的列来实现,行的建立时间、行的过时时间(删除时间)。这里的时间指的是系统版本号,每开始一个新的事物,系统版本号都会自增。事物开始时刻的系统版本号会做为事物的版本号,用来和查询到的每行记录的版本号进行比较。
REPEATABLE READ隔离级别下MVCC的具体操做性能
SELECT
- InnoDB 只查找版本早于当前事物版本的数据行(行的系统版本号 <= 事物的系统版本号),这样能够确保事物读取的行,要么是在事物开始前已经存在的,要么是事物自身插入或者修改过的。(也就是和其它事物是隔离的)
- 行的删除版本要么未定义,要么大于当前事物版本号。这样能够确保事物读取到的行,在事物开始以前未被删除。
符合上面两个条件的记录才能返回作完查询结果。数据
INSERT
- InnoDB 为新插入的每一行保存当前系统版本号做为行版本号。
UPDATE
- InnoDB 为插入一行新记录,保存当前系统版本号做为行版本号,同时保存当前系统版本号到原来的行做为行删除标识。
DELETE
- InnoDB 为删除的每一行保存当前系统版本号做为删除标识。
摘自《高性能MySQL》