MySQL事务和MVCC

2020-12-13  本文已影响0人  Lnstark

抄书做个记录。

定义

事务就是一组原子性的SQL查询,事务内的语句,要么全部执行,要么全部失败。

事务的特性

隔离级别

多版本并发控制(MVCC)

可认为MVCC是行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此额外开销更低。
InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间,一个保存了行的过期时间(或删除时间)。当然存储的并不是实际的时间值,而是系统版本号。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较。下面看一下在repeatable read隔离级别下,MVCC具体是如何操作的。

保存这两个额外的系统版本号,使大多数操作都可以不用加锁,这样提高了性能。不足之处就是需要额外的存储空间,需要做更多的行检查工作和额外的维护工作。

MVCC只在repeatable read和read committed两个隔离级别下工作。其他两个隔离级别都和MVCC不兼容,因为read uncommitted总是读取最新的数据行,而不是符合当前事务版本的数据行。而serializable则会对所有读取的行都加锁。

上一篇 下一篇

猜你喜欢

热点阅读