LRU淘汰算法
2021-09-04 11:51:27 0 举报
LRU淘汰算法
作者其他创作
大纲/内容
分为两区域:young区域,也就是热数据,存储频率非常高的缓冲页。old区域,冷数据,使用频率比较低的缓冲页。默认old区占37%
预读机制两种情况:1。线性预读:如果顺序访问某个区(extent)的页面超过某个阈值(默认56),就会触发一次异步读取下一个区中全部的页面到bufferpool中的请求。2。随机预读:如果某个区的13个连续的页面都被加载到了bufferpool中,无论这些页面是否顺序读取,都会触发一次异步读取本区中所有其它页面到buffer pool中的请求。(默认不启动)原因①:有了预读就可能导致加载到bufferpool中的页不一定被用到,而且使用频率低的可能把频率高的给挤出去。所以分了冷热数据区也就是young跟old.刷新脏页到磁盘的时机:1。后台线程从lru链表的冷数据中刷新一部分页面到磁盘2。后台线程定时从flush链表刷新部分页面到磁盘。在old区域内的数据,在不到1s内你又访问了它,那在这段时间内被访问的缓存页并不会被提升为热数据。但是在1s后你访问,是可以提升为热数据的。 这个1s由参数innodb_old_blocks_time控制
old区域(冷数据区域)占37%
磁盘
young区域(热数据区域)
LRU的演化
只有当被访问的缓冲页位于young区域的1/4的后面时,才会被移动到LRU链表的头部。(降低调整LRU链表的频率,从而提升性能)
见原因①
经常访问的数据放在LRU的头部,不经常访问的就放到尾部,一旦数据页不够用了,就把链表尾部对应的数据页刷入磁盘,以便腾出数据页接收磁盘数据的进入。
0 条评论
下一页