MySQL中执行SQL的BufferPool缓存机制

一、MySQL底层结构图

在这里插入图片描述

二、MySQL日志及缓存机制

看完MySQL的底层结构图,很多人可能会有这样的疑问:
为什么MySQL不能直接更新磁盘上的数据而且设置这么一套复杂的机制来执行SQL呢?

因为如果每一个请求直接对MySQL数据文件进行读写,是随机IO,对于每次读写,机械硬盘都有寻道时间和旋转延迟,因此直接更新数据磁盘文件性能是比较低的,对于固态硬盘,也需要通过地址转换机制确定读写位置,所以直接更新磁盘文件是不能让数据库抗住很高并发的。
还有一个原因是修改量与磁盘刷新量严重不成比例,每更新一条记录需要将该记录所在的整个页面进行磁盘刷新。
MySQL这套机制看起来复杂,但它可以保证每个更新请求都是更新内存BufferPool,然后顺序写日志文件,同时还能保证各种异常情况下的数据一致性。更新内存和顺序写磁盘上的日志文件的性能是非常高的,要远高于随机读写磁盘文件。

  1. binlog:是属于MySQL Server层的日志文件,记录的是所有对数据库进行增删改的操作(事件形式,二进制数据),主要用于恢复数据和主从复制。
  2. undo log:InnoDB引擎特有的日志文件,记录的是逻辑操作,例如进行insert操作时,undo log会写入对应的delete操作。主要用于事务回滚时恢复Buffer Pool缓存池里的数据。
  3. redo log:InnoDB引擎特有的日志文件,记录的是物理操作,例如页号1,偏移量10,写入了数据xxx。主要用于系统宕机重启后恢复Buffer Pool缓存池里还未写入磁盘的数据。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

it00zyq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值