- 缓冲池是为了降低磁盘IO
- LRU内存淘汰策略 最久未被使用的数据页将被淘汰
- 使用
双向链表
来维护Buffer Pool中数据页的顺序,最近被访问的数据页会被移动至链表头部 - 最久未被使用的数据页会被下沉至链表尾部
- MySQL会从链表尾部开始检查,淘汰的数据页会被标记为脏页,在需要写回磁盘时进行持久化操作
- 两部分,热数据和冷数据,冷数据占比3/8 热数据占比5/8
- 新加入的数据页会被放在冷数据区域的头部
-
innodb_old_blocks_time
参数,默认值1000毫秒 - 为什么是1000毫秒?因为通过预读机制和全表扫描加载进来的数据页通常是1秒内就加载了很多,然后对它们访问一下,这些都是1秒内完成,它们会存放在冷数据区域等待刷盘清空,基本上不太会有机会放入到热数据区域,除非在1秒后还有人访问,存在后续还会有人访问的肯呢个,才会放入热数据区域的头部