MySQL buffer pool中的三种链
一、innodb buffer pool中的三种页
1、free page:从未用过的页
2、clean page:干净的页,数据页的数据和磁盘一致
3、dirty page:脏页
SQL执行需求:
1、找free页
2、刷新脏页
1、这个页不是热的数据页(刷冷页)
2、这个页最早修改时间(刷修改时间比较早的页,有可能是热页),方便日志文件的覆盖
3、覆盖冷的clean页
为了实现上述需求,innodb用到链表技术(每种链表一种作用,链的存在意义是为了遍历)。
二、innodb buffer pool中的三种链
1、free list:将free数据页使用链表链起来
数据库刚启动的时候,lru列表为空,此时需要用到的时候直接将free列表中的页删除,在lru列表中增加相应的页,维持页数守恒。
2、lru list:根据冷热将clean、dirty链起来
least recent used(最近最少使用)
1、“中点插入策略”
2、回写尽量回写冷的脏块
3、覆盖尽量覆盖冷的脏块
LRU标准算法:
1)3/8的list信息是作为old list,这些信息是被驱逐的对象。
2)list的中点就是我们所谓的old list头部和new list尾部的连接点,相当于一个界限。
3)新数据的读入首先会插入到old list的头部。
4)如果是old list的数据被访问到了,这个页信息就会变成new list,变成young page,就会将数据页信息移动到new sublist的头部。
5)在数据库的buffer pool里面,不管是new sublist还是old sublist的数据如果不会被访问到,最后都会被移动到list的尾部作为牺牲者。
3、flush list:将页按照最早脏时间链起来
flush list中的也全都是脏页,刷盘即将flush list中的脏页刷新回磁盘中。
1、将非常旧的脏块回写到磁盘,按照新旧回写数据页;
2、因为是从最早脏的块开始刷,这样logfile里的对应的日志就可以被覆盖了。

Q:为什么需要这三种链 ?
A:
因为在innodb 缓冲池中,内存管理如下:
1、需要经常找 free 空闲数据块:free list。
2、需要经常找冷的数据块:lru list(最近最少使用,根据冷热链起来)。
3、需要知道哪些数据块是比较早脏的,flush list:我们要覆盖旧的 logfile,就需要系统将这些 logfile 对应的脏块,即将 flush list 链上的脏页往磁盘上刷,(批量往磁盘写的时候,不如刷脏页)。
三、LRU冷热区控制及调整
1、设置冷热分界线:innodb_old_blocks_pct
2、成为热块的所需时间:innodb_old_blocks_time
mysql> show variables like '%old_blocks%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| innodb_old_blocks_pct | 37 |
| innodb_old_blocks_time | 1000 |
+------------------------+-------+
2 rows in set (0.01 sec)
通过 innodb_old_blocks_pct 参数值得设定分为两部分:一是存放长时间未被访问的数据页,二是存放最近被访问的数据页。靠近 LRU 链表头部的数据页表示最近经常被访问,靠近尾部表示数据页长期未被访问,这两个部分的交汇处称为 midpoint,即 innodb_old_blocks_pct这个点的设置。默认是37%,最小是5,最大是95;如果内存比较大的话,可以将这个数值调低,通常会调成20,也就是说20%的是冷数据块。目的是为了保护热区数据不被刷出内存。
通过innodb_old_blocks_time参数来控制成为热数据的所需时间,默认是1000ms,也就是1s,也就是数据在1s内没有被刷走,就调入热区。
3、LRU冷热数据的监控
mysql> show engine innnodb status\G
……
Pages made young 0, not young 0
0.00 youngs/s, 0.00 non-youngs/s
1、数据页从冷到热,称为young;not young就是数据在没有成为热数据情况下就被刷走的量(累计值)。
2、non-youngs/s,这个数值如果很高,一般情况下就是系统存在严重的全表扫描,自然意味着很高的物理读。
3、youngs/s,如果这个值相对较高,最好增加一个innodb_old_blocks_time,降低innodb_old_blocks_pct,保护热数据。
MySQL buffer pool中的三种链的更多相关文章
- 【MySQL】mysql buffer pool结构分析
转自:http://blog.csdn.net/wyzxg/article/details/7700394 MySQL官网配置说明地址:http://dev.mysql.com/doc/refman/ ...
- 关于MySQL buffer pool的预读机制
预读机制 两种预读算法 1.线性预读 2.随机预读 对预读的监控 一.预读机制 InnoDB在I/O的优化上有个比较重要的特性为预读,预读请求是一个i/o请求,它会异步地在缓冲池中预先回迁多个页面,预 ...
- Netty中的三种Reactor(反应堆)
目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...
- SuperDiamond在JAVA项目中的三种应用方法实践总结
SuperDiamond在JAVA项目中的三种应用方法实践总结 1.直接读取如下: @Test public static void test_simple(){ PropertiesConfigur ...
- MySQL、SqlServer、Oracle 三种数据库的优缺点
MySQL.SqlServer.Oracle 三种数据库的优缺点 一.MySQL 优点: 缺点: 二.SqlServer 优点: 缺点: 三.Oracle 优点: 缺点: 一.MySQL 优点: 体积 ...
- Java三大框架之——Hibernate中的三种数据持久状态和缓存机制
Hibernate中的三种状态 瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没有这个对象对应的数据为瞬时状态这个时候是没有OID. 持久状态:对象经过 ...
- Asp.Net中的三种分页方式
Asp.Net中的三种分页方式 通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等. 第一种:使用Grid ...
- httpClient中的三种超时设置小结
httpClient中的三种超时设置小结 本文章给大家介绍一下关于Java中httpClient中的三种超时设置小结,希望此教程能给各位朋友带来帮助. ConnectTimeoutExceptio ...
- 研究分析JS中的三种逻辑语句
JS中的三种逻辑语句:顺序.分支和循环语句. 一.顺序语句 代码规范如下:1. <script type="text/javascript"> var a = 10; ...
随机推荐
- spring + springmvc+ mybatis 事务管理及控制
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 团体队列UVA540 Team Queue(队列简单用法)
题目背景 队列和优先级队列是大多数计算机科学家都知道的数据结构.但是团队队列却不被人熟知,尽管在生活中经常出现.比如,午餐时间的食堂门口的队列就是一个团队队列.在一个团队队列中,每个元素属于一个团队. ...
- css实现选项卡
<style> *{ margin: ; padding: ; text-decoration: none; list-style: none; outline:none; } .box{ ...
- Linux编程之select
select系统调用的的用途是:在一段指定的时间内,监听用户感兴趣的文件描述符上可读.可写和异常等事件. select 机制的优势 为什么会出现select模型? 先看一下下面的这句代码: int i ...
- 使用awk进行日志信息的分组统计
起因 这是今天我线上出了一个bug,需要查看日志并统计一个我需要的信息出现的频率,可以叫做分组统计. 日志文件部分内容 00:09:07.655 [showcase_backend][topsdk] ...
- Gist - ES6 Iterator
Introduction Iterator is one of the most common design modes in daily development. Let's explore the ...
- java中打印输出数组
import java.util.Arrays; public class ArrayDemo { public static void main(String[] args) { int size ...
- IOS 关于property的详细解法
1.格式 @property (参数1,参数2,...) 类型 名字; eg: @property(nonatomic,retain) UIWindow *window; 其中参数主要分为三类: • ...
- 一张图搞定Java设计模式——工厂模式! 就问你要不要学!
小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...
- 实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件
今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多 ...