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,先进先出)页面置换算法,这是的最早出现的置换 ...
随机推荐
- Transform开发cube模型权限处理之不同用户数据的过滤
========================此文不再详细的说transform的开发过程====================================================== ...
- [Tools] Target specific browsers with babel-preset-env and the babel pollyfill (browserslist)
Converting all of our modern JavaScript into ES5 compatible syntax is a great way to use modern feat ...
- 记dynamic的一个小坑 -- RuntimeBinderException:“object”未包括“xxx”的定义
创建一个控制台程序和一个类库, 在控制台创建一个匿名对象.然后再在类库中訪问它.代码例如以下: namespace ConsoleApplication1 { class Program { stat ...
- Android 四大组件之 Service(一)
Service是Android中四大组件之一,在Android开发中起到非常重要的作用,它运行在后台,不与用户进行交互. 1.Service的继承关系: java.lang.Object → andr ...
- Java从零开始学二十六(包装类)
一.包装类 包装类是将基本类型封装到一个类中.也就是将基本数据类型包装成一个类类型. java程序设计为每一种基本类型都提供了一个包装类.这些包装类就在java.lang包中.有8个包装类 二.包装类 ...
- Python 迭代dict的value
迭代dict的value 1:values() 2:itervalues() 3:for key in Di: print (Di[key]) 我们已经了解了dict对象本身就是可迭代对象, ...
- vue源码cached高阶函数解析
1.源代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...
- 解决 在POM配置Maven plugin提示错误“Plugin execution not covered by lifecycle configuration”
eclipse在其POM文件的一处提示出错如下: Plugin execution not covered by lifecycle configuration: org.apache.maven.p ...
- POJ 1163 The Triangle DP题解
寻找路径,动态规划法题解. 本题和Leetcode的triangle题目几乎相同一样的,本题要求的是找到最大路径和. 逆向思维.从底往上查找起就能够了. 由于从上往下能够扩展到非常多路径.而从下往上个 ...
- 【Java虚拟机】运行时数据区
Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途.创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随 ...