innodb 的预读

innodb在io的优化上有个比较重要的特性为预读,innodb以64个page为一个extent,那么innodb的预读是以page为单位还是以extent?

这样就进入了下面的话题:linear read-ahead和randomread-ahead;

为了区分这两种预读的方式,我们可以把linear预读放到以extent为单位,而random 预读放到以extent中的page为单位;

linear 预读着眼于将下一个extent提前读取到buffer pool中,

而random预读着眼于将当前extent中的剩余的page提前读取到buffer pool 中:

linear的预读方式有一个很重要的变量控制是否将下一个extent预读到buffer pool中:innodb_read_ahead_threshold:如果一个extent中的被顺序读取的page超过或者等于该参数变量的,innodb将会异步的将下一个extent读取到buffer pool中,比如该参数的值为30,那么当该extent中有30个pages 被 sequentially的读取,则会触发innodb linear预读,将下一个extent读到内存中;在没有该变量之前,当访问到extent的最后一个page的时候,innodb会决定是否将下一个extent放入到buffer pool中;

该参数可以动态的修改:

root@(none) 09:20:02>set global innodb_read_ahead_threshold=40;

Query OK, 0 rows affected (0.00 sec)

random的预读方式则是表示当同一个extent中的一些page在buffer pool中发现时,innodb会将该extent中的剩余page一并读到buffer pool中,由于random的预读方式给innodb code带来了一些不必要的复杂性,同时在性能也存在不稳定性,在5.5中已经将这种预读方式废弃。

在监控innodb的预读时候,我们可以通过show innodb status中的 Pages read ahead和evicted without access 两个值来观察预读的情况:

或者通过两个状态值:

Innodb_buffer_pool_read_ahead 和 Innodb_buffer_pool_read_ahead_evicted.

Innodb_buffer_pool_read_ahead:表示通过预读请求到buffer pool的pages;

Innodb_buffer_pool_read_ahead_evicted:表示由于请求到buffer pool中没有被访问,而驱逐出buffer pool的pages;

root@(none) 10:19:42>show global status like ‘%read_ahead%’;

+—————————————+———+

| Variable_name | Value |

+—————————————+———+

| Innodb_buffer_pool_read_ahead | 775378 |

| Innodb_buffer_pool_read_ahead_evicted | 1888537 |

而通过show innodb status得到的 Pages read ahead 和evicted without access 则表示每秒读入和读出的pages;

Pages read ahead 1.00/s, evicted without access 9.99/s.

ref:

时间: 2024-10-31 09:45:26

innodb 的预读的相关文章

改良XP预读文件 让关机速度快如闪电!

一.禁止程序产生索引文件 预读文件导致系统启动变慢,是因为要读取运行程序时生成的索引文件所造成的.因此,我们只需要禁止PF文件的产生即可. 在"运行"窗口中输入"msconfig"后回车打开系统配置实用程序窗口,将其切换到"服务"标签,然后将其中的"Task Scheduler"项前的勾取消并保存设置,这样即可起到禁止建立索引文件的目的(快知道:电脑关机很慢怎么办?). 关闭"Task Scheduler"

XP系统下如何禁用系统的预读功能

  XP系统下如何禁用系统的预读功能 单击"开始"菜单,单击"运行"项 打开的运行对话框键入"regedit"命令,单击"确定"打开注册表编辑器 在左侧窗口定位到以下分支 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSessionManagerMemoryManagementPrefetchParameters 在右侧窗口双击"EnablePrefetcher&qu

改良XP预读文件 为系统启动提速

随着Windows系统的身躯越来越庞大,到了Windows XP中,微软提供了一种预读取的功能.即在Windows文件夹中添加了一个Prefetch文件夹,以利用该功能提高系统性能,加快系统启动和文件的读取速度.但是随着使用时间的增多,用户每使用一个程序,系统就会在该文件夹中留下一个以PF为扩展名的索引文件.预读文件导致系统启动变慢,是因为要读取运行程序时生成的索引文件所造成的.因此,我们只需要禁止PF文件的产生即可. 一.关闭相关服务 在"运行"窗口中输入"msconfig

WinXP系统预读如何禁用?

  WinXP系统预读如何禁用? 1.打开"运行"输入 regedit 命令,单击"确定"打开注册表编辑器; 2.按照以下路径寻找:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSessionManagerMemoryManagementPrefetchParameters 3.在"PrefetchParameters"下找到"EnablePrefetcher",用鼠标狠狠双击

Linux blockdev命令设置文件预读大小

  在命令行调用设备的ioctl函数.在Linux系统中,似乎对设备的直接操作只有ioctl函数了.他接受的参数不是太多,而且都是一一对应的. blockdev - 从命令行调用区块设备控制程序 blockdev [options] commands devices blockdev 工具允许从命令行调用区块设备控制程序. –setro 设置设备为只读 –getro 读取设备是否为只读(成功为1,0则为可读写) –setrw 设置设别为可读写 –getss 打印设备的扇区大小,通常是512 –g

Linux blockdev命令设置文件预读大小介绍

 在命令行调用设备的ioctl函数.在Linux系统中,似乎对设备的直接操作只有ioctl函数了.他接受的参数不是太多,而且都是一一对应的. blockdev - 从命令行调用区块设备控制程序 blockdev [options] commands devices blockdev 工具允许从命令行调用区块设备控制程序. –setro 设置设备为只读 –getro 读取设备是否为只读(成功为1,0则为可读写) –setrw 设置设别为可读写 –getss 打印设备的扇区大小,通常是512 –ge

Linux内核的文件预读详解

  Linux文件预读算法磁盘I/O性能的发展远远滞后于CPU和内存,因而成为现代计算机系统的一个主要瓶颈.预读可以有效的减少磁盘的寻道次数和应用程序的I/O等待时间,是改进磁盘读I/O性能的重要优化手段之一.本文作者是中国科学技术大学自动化系的博士生,他在1998年开始学习Linux,为了优化服务器的性能,他开始尝试改进Linux kernel,并最终重写了内核的文件预读部分,这些改进被收录到Linux Kernel 2.6.23及其后续版本中. 从寄存器.L1/L2高速缓存.内存.闪存,到磁

电脑浏览器怎么开启预读功能?

  预读功能就是浏览器自动发现潜在的网页内容,自动缓存好帮助我们快速进行网页的浏览,此功能在手机浏览器上非常实用,但是在电脑端这个功能还是比较少的. 在电脑端拥有预读功能的浏览器主要是Opera浏览器,我们可以在设置汇中进入"浏览器"选项,再在右侧窗口找到"预先载入发现内容".选中它以后重新启动浏览器,就可以启用网页预读功能了,网页浏览速度是不是大大加快了. 如果浏览器自身不带有预读功能,就需要借助第三方工具来实现.以火狐为例,首先点击"工具"菜

如何设置win7预读文件功能

  浅析windows7预读文件的功能和设置:在对win7版操作系统文件进行整理的过程中,系统文件以及程序都会是Ghost win7操作系统(雨林木风ghost win7系统下载)用户的主要针对对象.那么在win7版操作系统中存在的windows预读文件可以进行删除和优化吗?是不是对windows预读文件进行优化以后,win7版操作系统的开机速度就会有所提升了呢? Windows预读文件是win7版操作系统开启的时候,必须要启动的文件.对于win7版操作系统用户来说,如果在选择优化项目的时候,勾