mysql基础知识点五-MVCC
mysql基础知识点五-MVCC
mvvc(Multi-Version Concurrency Control)
一句话形容:MVCC机制的实现就是通过read-view机制与undo版本链比对机制,使得不同的事务会根据数据版本链对比规则读取
基本概念:
Mysql在可重复读隔离级别下如何保证事务较高的隔离性,我们上节课给大家演示过,同样的sql查询语句在一个事务 里多次执行查询结果相同,就算其它事务对数据有修改也不会影响当前事务sql语句的查询结果。 这个隔离性就是靠MVCC(Multi-Version Concurrency Control)机制来保证的,对一行数据的读和写两个操作默认 是不会通过加锁互斥来保证隔离性,避免了频繁加锁互斥,而在串行化隔离级别为了保证较高的隔离性是通过将所有操 作加锁互斥来实现的。 Mysql在读已提交和可重复读隔离级别下都实现了MVCC机制
下面看一下undo日志版本链与read view机制详解 (这个最重要)
-
首先undo日志版本链是一行数据被多次修改后会保留回滚的undolog,并且用俩个隐藏字段trx_id,roll_pointer把这些undolog串联成一个版本链。
-
read view别名,一致性视图,在事务结束之前不会变化,(读提交隔离级别下一致性视图每次提交都会重新生成),这个视图对应id要和数组中最小id和最大id进行比较,从而得到最终快照
-
版本链比对规则
注意看图片右下角,那是个比对规则 1. trx_id<min_id,表示为已提交 2. trx_id>max_id, 表示不可见, 3. min_id<=trx_id<=max_id时,trx_id在视图组中则表示由未提交事务产生不可见,反之可见。 对于删除可以认为是特殊的update,查看该条记录的头信息(record header)里的(deleted_flag)为true,代表删除
-
关于begin/start transaction的注意事项
当他们遇到第一个修改语句时,事务才真正启动,向mysql申请事务id。
Innodb引擎SQL执行的BufferPool缓存机制
看上面这个错综复杂的流程,为啥不直接更新磁盘上数据呢?
- 首先性能差,一个请求过来就对磁盘文件随机读写,然后在更新数据
- 其次磁盘读写能力很差,然后直接更新磁盘文件导致数据库并发能力会很差
- mysql这套复杂的机制可以保证更新的是内存bufferPool,然后在顺序写日志,同时海能保证数据一致性。
- 这套机制能保证mysql抗住每秒几千的读写
不恋尘世浮华,不写红尘纷扰
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码