InnoDB内存结构详解 深入解析InnoDB的内存结构
InnoDB内存结构详解
关于InnoDB内存结构详解的内容,接下来IT袋网小编就来介绍。

buffer pool
buffer pool是InnoDB的缓存,用来存放各种数据,包括索引页(index page)、数据页(data page)、undo页、插入缓冲、自适应哈希索引(AHI)、innodb存储的锁信息、数据字典等。把磁盘上的数据加载到缓冲池中(通过预读机制加载当前页、相邻页),可避免每次访问都进行磁盘IO,起到加速访问的作用。应用程序在对数据库执行增删改操作的时候,实际上主要都是针对内存里的buffer pool中的数据进行的。
buffer pool包含三种数据类型:
- free page:从未用过的页。
- clean page:干净的页,即数据页的数据和磁盘一致。
- dirty page:脏页,即数据页的数据和磁盘不一致。
针对这3种页,InnoDB使用3种链表维护:
- free list:空闲页链表,管理free page。
- flush list:脏页链表,管理dirty page并在某个时刻对该链表的脏页进行刷盘,按脏页的修改时间排序,更新操作较早的脏页先被刷盘。
- lru list:正在使用的内存页链表,里面包含clean page和dirty page,也就是说lru list中的页包含flush list中的所有脏页。lru list遵循lru算法管理缓存页。
InnoDB需要保证buffer pool的数据都是热点数据,将无效的预读数据快速删除、不将读入后立即使用的数据替换热点数据,就引入了变种lru算法(新生代+老生代、老生代停留时间窗口)来解决“预读失效”与“缓冲池污染”的问题。通过下列指令可以查询到数据库设置冷热分界线和成为热块的所需时间:
show variables like 'InnoDB_old_blocks_pct'; -- 单位%,默认37,代表冷数据占比
show variables like 'InnoDB_old_blocks_time'; -- 单位ms,默认1000
Mysql5.7.5之后,buffer pool有分块(chunk)的特性,即一个buffer pool实例是由多个块组成,每个块的块内空间是连续的,块与块之间则是离散的。分块是为了方便用户在mysql运行期间能够调整buffer pool的大小。
注意,为了提高读写性能,避免过少的数据刷盘或随机IO,buffer pool一般不会对单个Page实时刷盘,所以这就出现了缓存和磁盘的一致性问题,InnoDB通过引入redolog来保存数量操作记录从而解决此问题,见下文。
change buffer
change buffer(写缓存)是一种特殊的数据结构,可以避免数据更改时因为隐式查询数据带来的磁盘IO。change buffer默认占buffer pool的 25%,最大允许占50%。可以根据写业务的量调整,写操作越频繁,change buffer带来的性能提升越明显。
相关阅读
-
matepad11.11处理器 华为matepad11处理器型号
一篇很详细的教程是关于华为matepad11处理器型号IT技巧方面的经验,华为matepad11搭载7nm的高通骁龙865的处理器,正面是一块10.95英寸的无开孔屏幕,支持120Hz高刷新率。
-
惠普2700打印机连接wifi教程 惠普2700无线打印机怎么连接wifi
为大家介绍惠普2700无线打印机怎么连接wifi的内容,惠普2700无线打印机连接wifi共需六个步骤,在打印机的wifi地址界面即可操作,具体操作步骤如下:
-
打印机无法打印是怎么回事 关于打印机和电脑连接打印方法
为大家介绍打印机无法打印是怎么回事和关于打印机和电脑连接打印方法的介绍,一起来了解了解吧。 有时候会遇到打印机无法打印的情况,打印机无法打印大多是由于打印机使用、安装、设
-
摄像头进灰是不是拆过机 前置摄像头进灰尘变模糊怎么办
下面为网友们详细介绍前置摄像头进灰尘变模糊怎么办和摄像头进灰是不是拆过机的相关话题,请看下面详细的介绍。 手机成为现代人不可或缺的日常用品,而其中的摄像头也是手机最常用的


