认识InnoDB MVCC如何工作

coldplay.xixi
发布: 2020-10-10 17:51:18
转载
1839人浏览过

认识InnoDB MVCC如何工作

innodb 的 mvcc,是通过在每行记录后面保存两个隐藏的列实现的。这两个列,一个保存了行的创建时间,一个保存行的过期时间(或删除时间)。当然存储的不是实际的时间值,而是系统版本号。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较,下面看可重复读隔离级别下,mvcc 具体是如何操作的。

SELECT

InnoDB会根据以下两个条件检查每行记录

a. InnoDB只查找版本早于当前事务版本的数据行(也就是,行的系统版本号小于或者等于事务的系统版本号),这样可以确保事务读取的行,要么是在事务开始前已经存在的,要么是事务自身插入或者修改过的。

b. 行的删除版本要么未定义,要么大于当前事务版本号。这可以确保事务读取到的行,在事务开始之前未被删除。

只有符合上述两个条件的记录,才能作为查询结果返回。

INSERT

InnoDB为新插入的每一行保存当前系统版本号作为行版本号

DELETE

InnoDB为删除的每一行保存当前系统版本号作为行删除标识。

PHP高级教程
PHP高级教程

前言   第一部分 基础知识篇   第1章 PHP概述   1.1 PHP入门   1.1.1 PHP介绍   1.1.2 PHP的工作原理   1.1.3 如何学好PHP编程   1.2 PHP环境搭建   1.2.1 PHP相关软件下载   1.2.2 AppServ安装与测试(Windows)   1.2.3 XAMPP安装与测试(Windows)   1.2.4 II

PHP高级教程 508
查看详情 PHP高级教程

UPDATE

InnoDB为插入一行新纪录,保存当前系统版本号作为行版本号,同时保存当前系统版本号到原来的行作为行删除标识。

保存这两个额外系统版本号,使大多数读操作都可以不用加锁。这样设计使得读数据操作很简单,性能很好,并且也能保证只会读取符合标准的行。不足之处是每行记录都需要额外的存储空间,需要做更多的行检查工作,及一些额外的维护工作。

MVCC只在 REPEATABLE READ(可重复读)和 READ COMMITTED(读提交) 这两个隔离级别下工作。其他两个隔离级别都和 MVCC不兼容,因为READ UNCOMMITTED(读未提交) 总是读取最新的数据行,而不是符合当前事务版本的数据行。而 SERIALIZABLE(串行化) 则会对所有读取的行都加锁。

相关学习推荐:mysql数据库

以上就是认识InnoDB MVCC如何工作的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:juejin网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号