【MySQL】日志缓冲区详解 以及 InnoDB内存结构总结
📢博客主页:https://blog.csdn.net/2301_779549673
📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 CSDN🙉
📢未来很长,值得我们全力奔赴更美好的生活✨
文章目录
- 🏳️🌈一、日志缓冲区的作用?
- 🏳️🌈二、日志不通过Log Buffer直接写入磁盘不行吗?
- 🏳️🌈三、InnoDB内存结构总结
- 👥总结
前些天发现了一个巨牛的 人工智能学习网站
,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到 网站。
🏳️🌈一、日志缓冲区的作用?
日志缓冲区
是服务器启动时向操作系统申请的一片连续的内存区域,存储即将要写入磁盘日志文件的数据。
在对数据库进行 DML
操作时,InnoDB
会记录对应操作的日志,比如为保证数据完整性实现数据库崩溃恢复的 Redo Log
,这些日志会首先写入 Log Buffer
中,从而解决同步写磁盘导致的性能问题然后根据不同落盘策略最终写入磁盘
🏳️🌈二、日志不通过Log Buffer直接写入磁盘不行吗?
如果日志不通过 Log Buffer
直接写入磁盘,那么每次进行 DML 操作都会进行一次磁盘I/0,这样会严重影响效率,所以把日志统一写入内存中的LogBuffer,根据刷盘策略统一进行落盘操作,可以实现一次磁盘I/0写入多条日志,从而提升效率
🏳️🌈三、InnoDB内存结构总结
InnoDB内存结构主要分为:
Buffer Pool
缓冲池、Change Buffer
变更缓冲区adaptive_hash_index
自适应哈希索引。Log Buffer
日志缓冲区。
缓冲池
- 内存中的主要工作区域。
- 缓冲池中包含至少一个
Instances
,每个Instances
中包含至少一个CChunk
,Chunk
管理着多个数据页 - 缓冲池中使用控制块与数据页建立对应关系,通过双向链表连接每个控制块,从而管0理数据页
- 缓冲池中有三个链表分别是 Free List、LRU List 和 Flush List:。
Free List
: 只管理 Free 页LRU List
: 管理 Clean 页和 Dirty 页Flush List
: 只管理 Dirty 页
- 缓冲池淘汰策略采用变形的最近最少使用算法LRU。
变更缓冲区
用来缓存对二级索引数据的修改,从而减少磁盘的10次数以提升效率。
自适应哈希索引
为频繁使用的查询条件和对应的数据页建立映射关系,从而提升内存级别的查询效率
日志缓冲区
把日志统一写入内存中的 Log Buffer
,根据刷盘策略统一进行落盘操作,从而减少磁0盘的10次数以提升效率
👥总结
本篇博文对 【MySQL】日志缓冲区详解 以及 InnoDB内存结构总结 做了一个较为详细的介绍,不知道对你有没有帮助呢
觉得博主写得还不错的三连支持下吧!会继续努力的~