一、Innodb 架构图
1.整体架构图-内存结构 & 磁盘结构
二、Buffer Pool 缓存池
1. 缓存池实现
采用页面链表表(划分可能容纳多行的页) + 中点插入策略(新增加的页插入到链表中间,中点位置3/8)。
2. 中点插入策略(优化版LRU)
- 中点插入策略优点:最小化进入缓冲池并且再也不会被访问的数据量,确保频繁访问的热点页扔存在缓存池中。
- 相比LRU算法优化点:所有新读的页面都被插入到LRU列表尾部的3/8处。当这些页面第一次在缓冲池中被访问时,它们会被移动到列表的前面(最近使用的结束)。因此,从未被访问过的页面永远不会出现在LRU列表的前面部分,并且比使用严格的LRU方法更快地“老化”。这种安排将LRU列表分为两个部分,插入点的下游页面被认为是“旧的”。
缓存池抗扫描优化点参数:
(1).innodb_old_blocks_pct: 37修改插入位点 3/8.
(2).innodb_old_blocks_time: 1000(毫秒)第一次访问页之后的指定时间内再次访问该页,该页不会被移动到LRU队列头部。,防止一个页被快速连续的访问几次后,再也不访问。
3. 缓存池预读技术
-
何为预读技术
预读技术是指请求是一个I/O请求,异步地预取缓冲池中的多个页,以应对即将使用这些页的情况。 -
线性预读技术:
它根据按顺序访问的缓冲池中的页面来预测可能很快需要哪些页面。通过配置参数innodb_read_ahead_threshold,可以通过调整触发异步读请求的连续页面访问次数来控制InnoDB何时执行预读操作。在添加此参数之前,InnoDB只会在读取当前盘区最后一页时计算是否对整个下一个盘区发出异步预取请求。
优化参数: Innodb_read_ahead_threshold:56 -
随机预读技术:它根据缓冲池中已经存在的页面预测何时可能很快需要页面,如果缓存池中发现有相同范围的页,如果在缓冲池中发现同一个范围中有13个连续的page, InnoDB会异步发出一个预取范围剩余page的请求。
4. Buffer Pool 缓存池默认大小
默认大小是128M。