当前位置:   article > 正文

MySQL中执行SQL的BufferPool缓存机制

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缓存池里还未写入磁盘的数据。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/575571
推荐阅读
相关标签
  

闽ICP备14008679号