论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
DevOps与敏捷开发
›
深入理解 MVCC 与 BufferPool 缓存机制
深入理解 MVCC 与 BufferPool 缓存机制
飞不高
论坛元老
|
2025-1-4 11:28:30
|
显示全部楼层
|
阅读模式
楼主
主题
1015
|
帖子
1015
|
积分
3045
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
深入理解 MVCC 与 BufferPool 缓存机制
在 MySQL 数据库中,MVCC(Multi-Version Concurrency Control)多版本并发控制机制和 BufferPool 缓存机制是非常紧张的概念,它们对于保证数据的一致性、并发性以及提升数据库性能起着关键作用。本文将深入探究这两种机制,帮助读者更好地理解其原理和应用。
一、MVCC 多版本并发控制机制
隔离性保证
MySQL 在可重复读隔离级别下,通过 MVCC 机制来保证事务较高的隔离性。例如,在一个事务中多次实行雷同的 SQL 查询语句,纵然其他事务对数据举行了修改,当前事务的查询结果也不会受到影响。
与串行化隔离级别差别,MVCC 在读写操作时默认不通过加锁互斥来保证隔离性,制止了频仍加锁带来的性能开销,而串行化隔离级别是将全部操作加锁互斥来实现隔离性。
MySQL 在读已提交和可重复读隔离级别下都实现了 MVCC 机制。
undo 日记版本链与 read view 机制
undo 日记版本链
:当一行数据被多个事务依次修改时,MySQL 会保留每次修改前的数据 undo 回滚日记,并使用两个隐藏字段 trx_id(事务 ID)和 roll_pointer 将这些 undo 日记串联起来,形成一个历史记录版本链。例如,对于一个 account 表中的记录,每次修改后都会生成新的 undo 日记,记录修改前的数据状态。
read view 机制
:在可重复读隔离级别下,当事务开启并实行任何查询 SQL 时,会生成当前事务的一致性视图 read - view,该视图在事务结束之前保持稳定(读已提交隔离级别在每次实行查询 SQL 时会重新生成)。read - view 由实行查询时全部未提交事务 id 数组(此中最小的 id 为 min_id)和已创建的最大事务 id(max_id)组成。事务中的 SQL 查询结果需要从对应版本链中的最新数据开始,逐条与 read - view 举行比对,以得到终极的快照结果。
版本链比对规则
:
如果 row 的 trx_id 落在绿色部门(trx_id < min_id),表现该版本是已提交事务生成的,数据可见。
如果 row 的 trx_id 落在赤色部门(trx_id > max_id),表现该版本是由将来启动的事务生成的,不可见(若 row 的 trx_id 就是当前自己的事务则可见)。
如果 row 的 trx_id 落在黄色部门(min_id <= trx_id <= max_id),包括两种情况:
若 row 的 trx_id 在视图数组中,表现该版本是未提交事务生成的,不可见(若 row 的 trx_id 就是当前自己的事务则可见)。
若 row 的 trx_id 不在视图数组中,表现该版本是已提交事务生成的,可见。
对于删除操作,可视为 update 的特别情况,会将版本链上最新数据复制一份,修改 trx_id 为删除操作的 trx_id,并在记录头信息的 deleted_flag 标志位写上 true,表现记录已被删除。查询时,若查到的记录 delete_flag 为 true,则不返回数据。
注意,begin/start transaction 命令并不是事务的真正出发点,实行到它们之后的第一个修改 InnoDB 表的语句时,事务才正式启动,MySQL 才会分配事务 id,且严格按照事务启动顺序分配。
二、Innodb 引擎 SQL 实行的 BufferPool 缓存机制
为何不直接更新磁盘数据
直接对磁盘文件举行随机读写并更新数据性能很差,因为磁盘随机读写性能远低于内存操作。如果来一个哀求就直接更新磁盘文件,数据库无法承受高并发。
BufferPool 缓存机制原理
MySQL 采取了一套复杂机制,先更新内存中的 BufferPool,然后顺序写日记文件(如 redo 日记)。更新内存性能极高,顺序写磁盘日记文件性能也较高,如许可以保证在较高设置机器上每秒能处理几千的读写哀求,同时保证各种异常情况下的数据一致性。例如,实行一个 update 语句时,数据会先在 BufferPool 中更新,同时记录 redo 日记,后续再根据肯定策略将 BufferPool 中的数据写入磁盘。
三、总结
MVCC 机制通过 read - view 和 undo 版本链比对机制,让差别事务能根据规则读取同一条数据在版本链上的差别版本,保证了事务隔离性。BufferPool 缓存机制则通过先更新内存再写日记的方式,提升了数据库性能并保证数据一致性。理解这两种机制对于优化数据库应用、处理并发事务以及确保数据可靠性都具有紧张意义。在实际应用中,合理利用 MVCC 的隔离级别和 BufferPool 的缓存特性,可以有用进步数据库体系的性能和稳定性,为业务提供可靠的数据支持。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
飞不高
论坛元老
这个人很懒什么都没写!
楼主热帖
Java集合的lastlastIndexOfSubList()方 ...
WPF开发经验-实现自带触控键盘的TextBo ...
如何在 K8S 集群范围使用 imagePullSec ...
【关系型数据库】事务特性及事务隔离级 ...
Python批量采集百度资讯文章,如何自定 ...
微信小程序集合3(百度小说+电商+仿哗 ...
MapReduce开发
瓦片地图
浅谈售前的业务思维
Navicat 连接服务器不成功(Access den ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
Oracle
分布式数据库
物联网
移动端开发
云原生
SQL-Server
Mysql
快速回复
返回顶部
返回列表