mysql预读机制
2020-12-14 14:56:14 0 举报
mysql预读机制
作者其他创作
大纲/内容
001 时刻加载
mysql 预读机制:mysql在磁盘上加载一个数据页的时候,会把这个数据页相邻的数据页也加载到BufferPool里面。mysql 在加载数据页的时候会把这一批加载的数据页放在LRU链表里面。
LRU尾指针
触发预读机制1 innodb_read_ahead_threshold 默认是56,顺序访问一个区里面多个数据页,如果访问数据页超过了这个阈值,就会触发预读2 innodb_random_read_ahead 默认是off 如果BufferPool 缓存了一个区的13个连续数据页,同时这些数据页还会被频繁访问,此时也会触发预读机制3 select * from table 这样的sql会全表扫描,会把一个表的所有数据页全部加载bufferpool的缓存页,添加到LRU的头部。
真正被访问
000~003 时间段都被频繁访问
2号缓存页
这两个机制放在一起就有问题
4号缓存页
3号缓存页
5号缓存页
思考?1 mysql为什么要设计这个预读机制?-- 减少io,计算机中局部性原理2 预读机制应对了什么场景?
预加载进来,实际没有被访问
前提条件:1 LRU 只有5个元素大小2 002 时刻还会加载数据页到缓存 那么在002时刻必然要淘汰LRU尾部的缓存页,按照规则 也就是5号缓存页被淘汰,但是5号缓存页在000~003时间段内都是被访问的,理论上不应该被淘汰。
1号缓存页
LRU头指针
0 条评论
下一页