mysql-5.7中innodb_buffer_pool页面淘汰算法
一、 什么是innodb_buffer_pool:
innodb_buffer_pool是一块内存区域,innodb用它来缓存数据,索引,undo,change buffer ... ;
这块区域又被分成若干份,每一份叫一个innodb_buffer_pool_instance。对于每一个instance来说
从数据结构上来看它就是一列表。innodb通过LRU算法对这个列表中的页进行管理
二、innodb 使用的是调整后的LRU算法:
1、innodb逻辑上把列表分成两段,前面的5/8叫做new列表,后面的3/8叫做old列表;
2、一个在磁盘上的数据页有两种可能会被调入innodb_buffer_pool,第一种是用户发起的SQL语句
用它了这个页面中的数据,第二种是innodb根据自己的预读算法把用户接下来非常有可能访问到的页
调入innodb_buffer_pool;
3、页面调入时都是先被插入到old列表中,如果old这个时候是满的,那么old列表就要淘汰掉相同数据的页面,
以容纳下新调入进入来的页面,那页面什么时候会进入new列表呢?由于第一种情况下调入的页面会马上被访问(access),
这个时候页面会被标记成'young',这样的页面就会进入new列表的顶部了;至于第二种情况下调入的页面能不能进入new列表
也是一样的,就看它在old列表中的时候有没有被访问,如果它一直没能被访问,那也就只能是被淘汰出old列表了。
三、这种调整后的LRU算法依然不完美:
这种调整后的LRU还是有可能出问题的,比如对一个大表进行全表扫描的话,就上面的算法而言,表中的所有页面都要进入new
列表;那么之前的热数据就都被这个全表扫描给挤出来了;
四、解决这种不完美:
innodb_old_blocks_time这个参数就是针对上面的不完美设计的,它是怎么做到的呢?页面不再是一被访问就能进入new列表
而是要在old列表中呆innodb_old_blocks_time这么长的时间后,又被访问了后才能进入new列表。
----
学习交流

mysql-5.7中innodb_buffer_pool页面淘汰算法的更多相关文章
- FIFO页面淘汰算法
1.优异虚拟存储系统,若进程在内存中占3页(开始时内存为空),若采用先进先出(FIFO)页面淘汰算法,当执行以下访问页号序列后1,3,4,2,1,3,5,1,2,5,4,2,会产生多少次缺页(9) 在 ...
- 近期最久未使用页面淘汰算法———LRU算法(java实现)
请珍惜小编劳动成果,该文章为小编原创,转载请注明出处. LRU算法,即Last Recently Used ---选择最后一次訪问时间距离当前时间最长的一页并淘汰之--即淘汰最长时间没有使用的页 依照 ...
- 最近最久未使用页面淘汰算法———LRU算法(java实现)
请珍惜小编劳动成果,该文章为小编原创,转载请注明出处. LRU算法,即Last Recently Used ---选择最后一次访问时间距离当前时间最长的一页并淘汰之--即淘汰最长时间没有使用的页 按照 ...
- (待续)C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)
目录 00 简介 01 算法概述 02 公用方法与变量解释 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存 ...
- 动手实现 LRU 算法,以及 Caffeine 和 Redis 中的缓存淘汰策略
我是风筝,公众号「古时的风筝」. 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面. 那天我在 LeetCode 上刷到一道 LRU 缓存机制的问题, ...
- MySQL分页优化中的“INNER JOIN方式优化分页算法”到底在什么情况下会生效?
本文出处:http://www.cnblogs.com/wy123/p/7003157.html 最近无意间看到一个MySQL分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的 ...
- 操作系统页面置换算法(opt,lru,fifo,clock)实现
选择调出页面的算法就称为页面置换算法.好的页面置换算法应有较低的页面更换频率,也就是说,应将以后不会再访问或者以后较长时间内不会再访问的页面先调出. 常见的置换算法有以下四种(以下来自操作系统课本). ...
- [Operate System & Algorithm] 页面置换算法
页面置换算法是什么?我们看一下百度百科对页面置换算法给出的定义:在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断.当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必 ...
- 操作系统 页面置换算法LRU和FIFO
LRU(Least Recently Used)最少使用页面置换算法,顾名思义,就是替换掉最少使用的页面. FIFO(first in first out,先进先出)页面置换算法,这是的最早出现的置换 ...
随机推荐
- Cognos定时Email发送报表数据功能
1:进入 IBM Cognos Configuration-Data Access-Notification 2:设置如下(注意一定要是smtp服务,端口25,我这里是用了腾讯邮箱的smtp服务) 当 ...
- Java 强引用、 软引用、 弱引用、虚引用
1.对象的强.软.弱和虚引用 在JDK 1.2曾经的版本号中.若一个对象不被不论什么变量引用,那么程序就无法再使用这个对象. 也就是说,仅仅有对象处于可触及(reachable)状态.程序才干使 ...
- iOS 获取流量
#include <arpa/inet.h> #include <net/if.h> #include <ifaddrs.h> #include <net/i ...
- adb(Android Debug Bridge)(一)
上一篇介绍的am,pm命令都是基于adb shell下的命令.这节来详细介绍下adb命令. Android Debug Bridge(adb)是一个让你跟模拟器或者android设备通信的多功能命令. ...
- Centering window on the screen
The following script shows how we can center a window on the desktop screen. #!/usr/bin/python # -*- ...
- 修改终端下vim的PopupMenu选种项的背景颜色
我平常比较喜欢使用终端下的 VIM,最方便的就是随时可以使用ctrl+z切换到终端下执行命令, 然后再通过fg切换回 VIM.如果再有个透明效果,那就更赞了.不过最近换了一个配色ron 后, 有个比较 ...
- exception PLS-00103: Encountered the symbol "(" when expecting one of the following:
exception PLS-00103: Encountered the symbol "(" when expecting one of the following: Cre ...
- properties转yml
分享一个在线properties 转 yml工具,也支持yml转properteis: http://toyaml.com/ 域名非常好记:to yaml .com yml,即yaml文本格式文件的后 ...
- servlet 多线程
servlet在服务器中只有一个实例,那么它响应请求的方式应该是多线程. 一,servlet容器如何同时处理多个请求. Servlet采用多线程来处理多个请求同时访问,Servelet容器维护了一个线 ...
- java 新创建的类要重写的方法
重写toString方法,可以控制println打印的结构. 如果需要往hashSet或者HashMap中存,需要重写hashCode和equals方法,因为hashSet执行添加,以对象为参数删除, ...