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,先进先出)页面置换算法,这是的最早出现的置换 ...
随机推荐
- 【Linux学习】Ubuntu下内核编译(一)
(1)当要运行内核配置时,输入make menuconfig时出现错误 遇到这个问题,主要是以为没有ncurses库,而make menconfig 须要这个库.因此须要安装ncurses或者ncur ...
- _PyUnicodeUCS4_AsDefaultEncodedString
"_PyUnicodeUCS4_AsDefaultEncodedString"的出现一般源于你在两个地方分别装了python,两个分别用UCS2和UCS4编码进行的build. 解 ...
- jsp中的js嵌入Extjs与后台action交互
近期做前台须要和后台交互数据,直接使用js一直没实现.最后使用extjs实现了,extjs代码直接嵌入到jsp的js代码中就可以(0跟jsp里使用extjs一样,须要载入extjs的几个文件) < ...
- MySQL auto_increment_increment 和 auto_increment_offset
参考这一篇文章:(不过我对这一篇文章有异议) http://blog.csdn.net/leshami/article/details/39779509 1:搭建测试环境 create table t ...
- 解决Linux SSH登录慢
出现ssh登录慢一般有两个原因:DNS反向解析的问题和ssh的gssapi认证 :ssh的gssapi认证问题 GSSAPI ( Generic Security Services Applicati ...
- rxvt-unicode配置
我的urxvt配置文件如下 前缀可改为rxvt然后可以使用rxvt命令启动 -/.Xresources ! urxvt color set URxvt.multichar_encoding:utf-8 ...
- jQuery知识集锦
CreateTime--2017年2月16日14:00:22Author:MarydonjQuery知识集锦1.empty()与remove()的区别 <select id="ty ...
- 〖Linux〗build ssh for Arm
1. 交叉编译环境: export ARCH=arm export SUBARCH=arm export PATH=/opt/FriendlyARM/toolschain//bin:$PATH exp ...
- urlretrieve 如何给文件下载设置下载进度?
#python #xiaodeng #如何给文件下载设置下载进度? import urllib def callbackinfo(down,block,size): ''' 回调函数: down:已经 ...
- 24、java操作xml方法
XML解析方式 1. SAX解析方式 SAX(simple API for XML)是一种XML解析的替代方法.相比于DOM,SAX是一种速度更快,更有效的方法.它逐行扫描文档,一边扫描一边解析.而且 ...