戴尔|浅谈 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日志细节也很多 , 本文只做个介绍 , 后续会有专门的文章讲解 。
小结【戴尔|浅谈 MySQL InnoDB 的内存组件】其实不难发现 , 缓冲池(Buffer Pool)和重做日志缓存(redo log buffer) , 它们都是为了减少硬盘IO开销 。
- CPU|戴尔这款微型台式机只有1.1L体积,配6核处理器,售价3999元
- Java|面向未来的高端轻薄本标杆!戴尔XPS 13 Plus是否值得选?
- MySQL|华为不再孤单?国产巨头杀入5G领域,市值暴涨4千亿超越腾讯!
- MySQL|它可能是300元内最值得购入的耳机
- 戴尔笔记本|学生党暑期上分怎么选手机?除了性能外,这几个配置要留意
- 亚马逊|可选4K触控屏幕!戴尔XPS 13(9315)是否值得选?
- MySQL|中企接连行动,苹果始料未及,央媒的呼吁起作用了?
- 近日|戴尔新一代xps13、xps13plus轻薄本上架
- 戴尔|1.9万元的戴尔XPS 13 Plus首次拆机:双风扇+豪华热管好激进
- MySQL|程序员应知应会之MySQL的存储引擎
