14.4.3.3 Making the Buffer Pool Scan Resistant  让Buffer Pool 扫描

相比使用一个严格的LRU算法, InnoDB 使用一个技术来最小化数据的总量,带入到buffer pool

不会被再次访问。

目的是确保频繁访问的("hot") 页停留在buffer pool里,

即使 预读和全表扫描把新的blocks 可能或者可能之后不被访问了。

新的读取的块被插入到LRU列表的中部,所有新读取的pages 是被插入到默认是 从LRU 列表尾部 3/8的位置。

pages 会被移动到列表的前面( 最近使用的尾端)

当它们在buffer pool被第一次访问。

因此,pages 不再被访问 不会让它到LRU 列表的全面部分,会很快淘汰 相比一个严格的LRU 方法。

这种安排 将LRU 列表氛围两端,pages插入点的中下游是认为老的,会被LRU驱逐

你可以控制插入点再LRU 列表和选择是否InnoDB 应用相同的优化对于带入到buffer pool的blocks.

配置参数是innodb_old_blocks_pct 控制 old blocks 的比例在LRU列表。

默认innodb_old_blocks_pct 是37,对应的固定比率是3/8.

mysql> show variables like '%innodb_old_blocks_pct%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_old_blocks_pct | 37 |
+-----------------------+-------+
1 row in set (0.00 sec) 值的范围是5(new pages 在buffer pool 会被很快淘汰) 到95(只有5%的buffer pool 会保留对于热pages) , 使得算法更接近于熟悉的LRU策略) 优化 让buffer pool 避免搅动 被预读可以避免类似问题由于 表或者索引扫描。 在那种扫描下,一个数据page 是典型的被访问很少次 在一个快速替代 不会再次访问。 配置参数是 innodb_old_blocks_time 指定时间(毫秒) 在第一次访问到page ,可以被访问不需要移动到 LRU 列表的最前面( 最近使用列表的最后面) 默认的innodb_old_blocks_time 是1000, 增加这个值可以让越来越多的块可能更快的age out 从buffer pool 由于这些参数的影响可以广泛的基于你的硬件配置,你的数据,和你负载的细节, 总是参照来验证有效性 在你改造这些设置 在生产环境。 innodb_old_blocks_pct and innodb_old_blocks_time 是动态的,global 可以在MySQL 选项文件指定 或者使用SET GLOBAL命令, 改变设置需要SUPER 权限 由于那些参数的影响可以。 在混合负载 大多数的活动是OLTP类型 定期的批量报告查询 会导致大量的扫描, 设置innodb_old_blocks_time 值在批处理运行可以帮助 mysql> show variables like '%innodb_old_blocks_pct%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_old_blocks_pct | 37 |
+-----------------------+-------+
1 row in set (0.00 sec) 当扫描大表,不能把整个放到buffer pool里时, 设置innodb_old_blocks_pct 为一个小的值 可以 让那些只读一次 消耗buffer pool的很大一部分。 比如,可以设置innodb_old_blocks_pct=5 可以限制那些只读一次的数据 到buffer pool的5% 当扫描小表到buffer pool, 移动pages 负载较小,你可以innodb_old_blocks_pct 为默认值,甚至更大 比如innodb_old_blocks_pct=50.

14.4.3.3 Making the Buffer Pool Scan Resistant的更多相关文章

  1. 14.6.3.3 Making the Buffer Pool Scan Resistant

    14.6.3.3 Making the Buffer Pool Scan Resistant 相比使用一个严格的LRU算法,InnoDB 使用一个技术来最小化数据总量 带入到buffer pool 而 ...

  2. 14.4.3.1 The InnoDB Buffer Pool

    14.4.3.1 The InnoDB Buffer Pool 14.4.3.2 Configuring Multiple Buffer Pool Instances 14.4.3.3 Making ...

  3. 14.6.3.5 Configuring InnoDB Buffer Pool Flushing

    14.6.3.5 Configuring InnoDB Buffer Pool Flushing InnoDB 执行某些任务在后台, 包括脏叶的刷新(那些已经发生改变的pages 但是没有写入到数据文 ...

  4. 14.6.3.4 Configuring InnoDB Buffer Pool Prefetching (Read-Ahead) 配置InnoDB Buffer pool 预取

    14.6.3.4 Configuring InnoDB Buffer Pool Prefetching (Read-Ahead) 配置InnoDB Buffer pool 预取 一个预读请求是一个I/ ...

  5. 14.6.3.2 Configuring Multiple Buffer Pool Instances 配置多个Buffer Poll 实例:

    14.6.3.2 Configuring Multiple Buffer Pool Instances 配置多个Buffer Poll 实例: 对于系统有多个buffer pools 在多个字节范围, ...

  6. 14.6.3.1 The InnoDB Buffer Pool

    14.6.3.1 The InnoDB Buffer Pool InnoDB 保持一个存储区域被称为buffer pool 用于cache数据和索引在内存里, 知道InnoDB buffer pool ...

  7. 14.4.3.6 Fine-tuning InnoDB Buffer Pool Flushing 微调 InnoDB Buffer Pool 刷新:

    14.4.3.6 Fine-tuning InnoDB Buffer Pool Flushing 微调 InnoDB Buffer Pool 刷新: innodb_flush_neighbors an ...

  8. 14.4.3.5 Configuring InnoDB Buffer Pool Flushing 配置InnoDB Buffer Pool 刷新:

    14.4.3.5 Configuring InnoDB Buffer Pool Flushing 配置InnoDB Buffer Pool 刷新: InnoDB执行某些任务在后台, 包括flush 脏 ...

  9. 14.4.3.4 Configuring InnoDB Buffer Pool Prefetching (Read-Ahead) 配置InnoDB Buffer pool 预读

    14.4.3.4 Configuring InnoDB Buffer Pool Prefetching (Read-Ahead) 配置InnoDB Buffer pool 预读 一个预读请求 是一个I ...

随机推荐

  1. Qt序列化格式分析(qint,QString)(非常简单好用)

    最近项目需要进行QT开发环境下对传输对象进行序列化与反序列化处理,对基本类型的处理在使用QT默认的序列化方式还是完全手工序列化这两种方式之间有些犹疑不定,边想了解下QT默认序列化基本类型的格式,项目中 ...

  2. C++静态库中使用_declspec(dllexport) 不能导出函数的问题

    在某项目中,有一些静态库,这些静态库中有类型命名的函数GET_XXX.在一次项目结构调整的时候,我想将调用这静态库的代码编译成DLL,并且将这些Get函数导出,我就直接就这些函数前面添加了_decls ...

  3. Qt实现QQ好友下拉列表(用QListView实现,所以还得定义它的Model)

    偶然发现Qt有个控件可以实现下拉列表,所以就试着实现一下类似QQ面板的下拉列表,这里主要实现几个功能: 1.可以删除列表中图标 2.可以像qq一样的,把某个分组下的图标转移到另外的分组 3.添加分组 ...

  4. linux下的软件包安装

    linux下安装软件包有两种方法:源文件编译安装(source)和 rpm 安装. 1.源文件包安装的通用方法. 一般安装源代码的程序你得要看它的README,一般在它的目录下都有的. 01.配置: ...

  5. Swift Error fatal error: unexpectedly found nil while unwrapping an Optional value

    致命的错误: 对一个为空的optional值进行解包. 强制解包(forced unwrapping): 在optional后面加叹号. 比如  "value!" 错误代码: le ...

  6. Light OJ 1318 Strange Game 组合数+高速幂+分解因子

    长度为l的用k种字符组成的字符串有k^l中 当中m个字符要不同样 那就是k^l*C(l, m)*(k-1)^m 有反复 要除以2 可是你mod n了 不能直接除 n不一定是素数 所以不能乘以逆元 所以 ...

  7. UVa 11045 My T-shirt suits me / 二分图

    二分图建图 判断是否是完全匹配就行 最大流也行 #include <cstdio> #include <cstring> const int MAX = 300; int a[ ...

  8. 使用css3写一朵云

  9. DelphiXE8怎么使用调试模式(朱建强)

    需求:在开发Android程序时,大家一直是使用ShowMessage.其实XE是支持下断点的. 操作: 1.小米手机用USB线,连到电脑上. 2.小米手机-设置-关于手机-"MIUI版本& ...

  10. webBrowser中操作网页元素全攻略

    原文 webBrowser中操作网页元素全攻略 1.获取非input控件的值: webBrowser1.Document.All["控件ID"].InnerText; 或webBr ...