Innodb引擎SQL执行的BufferPool缓存机制原来是这样的,太惊人了(简单理解)

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

在这里插入图片描述
以上图片把整个流程描绘的已经很清楚了,简单罗列如下

Created with Raphaël 2.2.0 加载数据到缓存区 写回滚日志undo 更新缓存数据 写redo日志 准备提交事务并把redo日志写入磁盘 准备提交事务并把binlog日志写入磁盘 把修改的数据写入磁盘 结束

问题总结

如果sql执行过程中出现宕机停止的的情况,Mysql是怎么保证数据的准确性的呢?

如果执行过程中出现宕机停止的的情况,Mysql重新启动后缓冲区会自动去redo日志里加载最新的数据来保证与磁盘数据的准确性与一致性。

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

----------------部分内容从网上获取,如有侵权,请告知删除------------------

猜你喜欢

转载自blog.csdn.net/weixin_51049616/article/details/108791596