高性能Mysql学习笔记之第一章
2017-12-21 11:27
232 查看
幻读:所谓幻读,指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行。InnoDb通过多版本并发控制解决了幻读的。
脏读:事务可以读取未提交的数据,这也被称为脏读。
MVVC:可以认为MVVC是行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此开销更低。虽然实现机制有所不同,但大都实现了非阻塞的读操作,写操作也只锁定必要的行。MVVC的实现,是通过保存数据在某个时间点的快照来实现的。
下面通过InnoDB的简化版行为来说明MVCC是如何工作的。
InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间(系统的版本号),一个保存行的过期时间(或删除时间)。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较。
MVCC只在REPEATABLE READ和READ COMMITTED两个隔离级别下工作。其它两个隔离级别都和MVCC不兼容,因为READ UNCOMMITTED总是读取最新的数据行,而不是符合当前事务版本的数据行。而SERIALIZABLE则会对所有的读取行都加锁。
脏读:事务可以读取未提交的数据,这也被称为脏读。
MVVC:可以认为MVVC是行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此开销更低。虽然实现机制有所不同,但大都实现了非阻塞的读操作,写操作也只锁定必要的行。MVVC的实现,是通过保存数据在某个时间点的快照来实现的。
下面通过InnoDB的简化版行为来说明MVCC是如何工作的。
InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间(系统的版本号),一个保存行的过期时间(或删除时间)。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较。
MVCC只在REPEATABLE READ和READ COMMITTED两个隔离级别下工作。其它两个隔离级别都和MVCC不兼容,因为READ UNCOMMITTED总是读取最新的数据行,而不是符合当前事务版本的数据行。而SERIALIZABLE则会对所有的读取行都加锁。
相关文章推荐
- MySQL Cookbook学习笔记第一章
- 高性能MySql学习笔记——多版本并发控制算法
- python-MySQL学习笔记-第一章链接到并创建数据库
- 高性能MySql阅读笔记-第一章
- 高性能MySQL学习笔记一:MySQL架构
- mysql高性能学习笔记整理
- MySQL高性能学习笔记
- 高性能MySQL第一章笔记
- 【MySQL】《高性能MySQL》 学习笔记,第一章
- MySQL学习笔记--创建高性能索引
- MySQL高性能学习笔记
- 高性能MySql学习笔记——锁、事务、隔离级别
- 数据库与MySQL 【数据库高效编程 - 学习笔记 第一章、第二章】
- 高性能MySql学习笔记——多版本并发控制算法
- 高性能MySql学习笔记——锁、事务、隔离级别
- 【学习笔记】高性能MySQL(第三版)——第2章:MySQL基准测试
- 高性能Mysql学习笔记-查询性能优化
- 【PHP-MySQL学习笔记】第一章 PHP概述
- MySql 学习笔记三:常用SQL优化
- MySQL官方参考文档学习笔记——第3章