尼康|浅谈 MySQL InnoDB 的内存组件

文章图片

文章图片
【尼康|浅谈 MySQL InnoDB 的内存组件】
文章图片

前言MySQL中执行一条SQL语句 , 相应表数据的读写都是由存储引擎去做(更新数据、查询数据) 。
在这个过程 , 存储引擎需要决策一些事情
- 数据是从内存查还是从硬盘查
- 数据是更新在内存 , 还是硬盘
- 内存的数据什么时候同步到硬盘
我们可以按需选择存储引擎 , 比如常见的InnoDB、MyISAM、Memory等等 。
众多存储引擎中 , InnoDB是最为常用的 , 从MySQL5.5.8版本开始 , InnoDB是默认的存储引擎 。
InnoDB简介InnoDB存储引擎支持事务 , 其设计目标主要面向在线事务处理(OLTP)的应用 。
特点是行锁设计、支持MVCC、外键 , 提供一致性非锁定读 , 同时本身设计能够最有效地利用内存和CPU , 是MySQL最常用的存储引擎 。
InnoDB的重要内存结构
InnoDB存储引擎在内存中有两个非常重要的组件 , 分别是缓冲池(Buffer Pool)和重做日志缓存(redo log buffer) 。
Buffer Pool简介缓冲池(Buffer Pool)里面会缓存很多的数据 , 比如数据页、索引页、锁信息等等 。
MySQL表数据是以页为单位 , 你查询一条记录 , 会从硬盘把一页的数据加载出来 , 加载出来的数据叫数据页 , 会放入到Buffer Pool中 。
后续的查询先从Buffer Pool中找 , 没有命中再去硬盘加载 , 减少硬盘IO开销 , 提升性能 。
更新表数据的时 , 如果Buffer Pool里命中数据 , 就直接在Buffer Pool里更新 。
总之Buffer Pool会缓存很多的数据 , 以便后续的查询与更新 。
小贴士:这里只是用数据页举例帮助大家理解 , 大家千万不要认为Buffer Pool里面只有数据页 , 它只是占Buffer Pool大部分空间 , 关于Buffer Pool更多细节 , 后续会有专门的文章讲解 。
redo log buffer简介接着思考一个问题 , 假设我们把Buffer Pool中某个数据页的某条数据修改了 , 但是硬盘的数据还未同步 , 此时数据是不一致的 , 如果MySQL宕机了 , 数据就丢失了 。
这可怎么办呢 。
为了保证数据的持久性 , InnoDB存储引擎加入了redo日志功能 , 也叫重做日志 。
每当我们对表数据进行更新时 , 会把“在某个数据页上做了什么修改”记录到重做日志缓存(redo log buffer)里 。
当事务提交时 , 会把redo log buffer清空 , 刷盘到redo日志文件 。
这样MySQL宕机了也没关系 , 因为重启后会根据redo日志去恢复数据 。
小贴士:redo日志细节也很多 , 本文只做个介绍 , 后续会有专门的文章讲解 。
小结其实不难发现 , 缓冲池(Buffer Pool)和重做日志缓存(redo log buffer) , 它们都是为了减少硬盘IO开销 。
相关经验推荐
- 佳能|佳能R5C、尼康400定,谁会成为虎年开门红?
- 荣耀magic|尼康正式发布旗舰Z 9新固件:连拍更稳更强
- MySQL|Redmi K40 游戏增强版参数评价如何?K50即将发布是否等待?
- 尼康|z50的触控以及屏幕显示效果,软件体验甚至能,把a73按在地上摩擦
- 尼康|99999元!尼康推出新款全画幅镜头:400mm,强到没话说
- MySQL|骁龙870+120Hz!OPPO首款平板来了
- MySQL|中国芯片黑马击败高通,从山寨机到全球第一,一年进账1136亿
- 尼康|专注高亮商务办公,明基MH560高清投影仪测评
- 尼康|尼康Z 7II全画幅微单评测:搭载双EXPEED 6处理器
- A轮融资|尼康Z 9测评:惊喜的不仅仅是速度
