Innodb特性之Read-Ahead(Buffer Pool Prefetching)

Read-Ahead官方说明:
https://dev.mysql.com/doc/refman/5.7/en/innodb-performance-read_ahead.html

设计目的:

Read-Ahead用于异步预取buffer pool中的多个page的一个预测行为。

InnoDB使用两种提前预读Read-Ahead算法来提高I/O性能。

Linear read-ahead:线性预读

如果一个extent中的被顺序读取的page超过或者等于
 

innodb_read_ahead_threshold

 
参数变量时,Innodb将会异步的将下一个extent读取到buffer pool中,innodb_read_ahead_threshold可以设置为0-64的任何值(注:innodb中每个extent就只有64个page),默认为56。值越大,访问模式检查就越严格。

Mark:官网说会预读取下一个extent,但当前extent剩下没有取完的page也会一起读取嘛? 还不没找到说明

Random read-ahead:随机预读

如果当同一个extent中连续的13个page在buffer pool中发现时,Innodb会将该extent中的剩余page读到buffer pool中。控制参数 

innodb_random_read_ahead
 默认没有开启。

评估预读算法的有效性

The 
SHOW ENGINE INNODB STATUS command displays statistics to help you evaluate the effectiveness of the read-ahead algorithm. Statistics include counter information for the following global status variables:

  • Innodb_buffer_pool_read_ahead 通过预读读入buffer pool中数据page数

  • Innodb_buffer_pool_read_ahead_evicted 通过预读没有被访问就被驱逐的page


  • Innodb_buffer_pool_read_ahead_rnd
     通过随机预读的次数

本文由 @飞天狗[Vip] 发布于 职涯宝 ,未经作者许可,禁止转载,欢迎您分享文章

发表评论

登录后才能评论
小程序
小程序
微信客服
微信客服
QQ客服 建站服务
分享本页
返回顶部