高性能Mysql学习日志(三)
1.4多版本并发控制 Mysql的大多数事务型存储引擎的实现都不是基于简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制(MVCC)。它的实现是通过保存数据再某个时间点的快照来实现的。当一个事务开始进行时,他无论花了多少时间执行多少次相同的查询,他看到的数据都是一致的。而不同的事务在不同时间点开始事务时,每个事务对同一张表、同一个时刻看到的数据可能都是不相同的。 以最经典的InnoDB引擎(隔离级别为REPEATABLE READ)为例,它的MVCC实现方法是通过在每行记录后面保存两个隐藏列来实现的。一个列保存行的创建时间,一个列用来保存列的过期时间(删除时间),他存储的不是实际的时间值,而是系统版本号,每当开始一个新的事务,系统版本号就会自动递增,该事务开始的时刻的版本号即为该事务的版本号,用来和该事务要查询的每行记录的版本号进行比较。 SELECT: InnoDB会根据以下两个条件检查每行记录: a.InnoDB只会查找版本小于或等于当前事务版本的数据行,这样可以保证事务读取的行要么在事务开始前已经存在了,要么是事务他自身插入或修改过的行。 b.行的删除版本要么未定义,要么要大于当前事务的版本号。这可以确保事务读取到的行,一定是在该事务开始时未被删除的数据行。 INSERT/DELETE: InnoDB为新插入(新删除的