Innodb引擎SQL执行的BufferPool缓存机制

1、先给一张图

在这里插入图片描述

2、大概写一下这张图的流程

1、来一条非查询语句,经过连接器、分析器、优化器,再到执行器,执行器,执行后面步骤。
2、加载根据where条件过滤出来的数据,将符合条件的整页数据都放到缓存池 buffer pool 中。
3、将 buffer pool中的数据写到 undo 日志文件中,这个文件是事务回滚时使用,Innodb引擎持有。
4、更新刚才加载到 buffer pool中的数据,根据sql更新。
5、将更新之后的数据写到 redo 日志文件中。
6、准备将redo日志写到磁盘,redo日志的作用是当服务器突然挂了,给服务器恢复数据的。
7、准备提交事务,将buffer pool中的数据复制一份写到 bin-log 日志并且写入磁盘, bin-log 日志用于用户手动恢复数据。
8、写入commit标记到redo日志中,保证redo日志和bin-log日志一致。


注意:从第七点我们可以看出,事务提交了之后,才会将数据写入到磁盘,这样是为了保证速度,不影响客户端的体验。

3、为什么Mysql不能直接更新磁盘上的数据而且设置这么一套复杂的机制来执行SQL了?

因为来一个请求就直接对磁盘文件进行随机读写,然后更新磁盘文件里的数据性能可能相当差。因为磁盘随机读写的性能是非常差的,所以直接更新磁盘文件是不能让数据库抗住很高并发的。 Mysql这套机制看起来复杂,但它可以保证每个更新请求都是更新内存BufferPool,然后顺序写日志文件,同时还能保证各种异常情况下的数据一致性。 更新内存的性能是极高的,然后顺序写磁盘上的日志文件的性能也是非常高的,要远高于随机读写磁盘文件。 正是通过这套机制,才能让我们的MySQL数据库在较高配置的机器上每秒可以抗下几干的读写请求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值