频道栏目
读书频道 > 数据库 > Mysql > MySQL技术内幕:InnoDB存储引擎(第2版)
2.6.4 异步IO
2013-05-24 08:08:24     我来说两句
收藏   我要投稿
本书由国内资深MySQL专家亲自执笔,国内外多位数据库专家联袂推荐。作为国内唯一一本关于InnoDB的专著,本书的第1版广受好评,第2版不仅针对最新的MySQL 5.6对相关内容进行了全面的补充,还根据广大读者的反馈意...  立即去当当网订购

为了提高磁盘操作性能,当前的数据库系统都采用异步IO(Asynchronous IO,AIO)的方式来处理磁盘操作。InnoDB存储引擎亦是如此。

与AIO对应的是Sync IO,即每进行一次IO操作,需要等待此次操作结束才能继续接下来的操作。但是如果用户发出的是一条索引扫描的查询,那么这条SQL查询语句可能需要扫描多个索引页,也就是需要进行多次的IO操作。在每扫描一个页并等待其完成后再进行下一次的扫描,这是没有必要的。用户可以在发出一个IO请求后立即再发出另一个IO请求,当全部IO请求发送完毕后,等待所有IO操作的完成,这就是AIO。

AIO的另一个优势是可以进行IO Merge操作,也就是将多个IO合并为1个IO,这样可以提高IOPS的性能。例如用户需要访问页的(space,page_no)为:

(8,6)、(8,7),(8,8)

每个页的大小为16KB,那么同步IO需要进行3次IO操作。而AIO会判断到这三个页是连续的(显然可以通过(space,page_no)得知)。因此AIO底层会发送一个IO请求,从(8,6)开始,读取48KB的页。

若通过Linux操作系统下的iostat命令,可以通过观察rrqm/s和wrqm/s,例如:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           4.70    0.00    1.60   13.20    0.00   80.50

 

Device:   rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util

sdc       3905.67   172.00 6910.33  466.67   168.81    18.15    51.91    19.17    2.59   0.13  97.73

在InnoDB1.1.x之前,AIO的实现通过InnoDB存储引擎中的代码来模拟实现。而从InnoDB 1.1.x开始(InnoDB Plugin不支持),提供了内核级别AIO的支持,称为Native AIO。因此在编译或者运行该版本MySQL时,需要libaio库的支持。若没有则会出现如下的提示:

/usr/local/mysql/bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

需要注意的是,Native AIO需要操作系统提供支持。Windows系统和Linux系统都提供Native AIO支持,而Mac OSX系统则未提供。因此在这些系统下,依旧只能使用原模拟的方式。在选择MySQL数据库服务器的操作系统时,需要考虑这方面的因素。

参数innodb_use_native_aio用来控制是否启用Native AIO,在Linux操作系统下,默认值为ON:

mysql> SHOW VARIABLES LIKE 'innodb_use_native_aio'\G;

*************************** 1. row ***************************

Variable_name: innodb_use_native_aio

       Value: ON

1 row in set (0.00 sec)

用户可以通过开启和关闭Native AIO功能来比较InnoDB性能的提升。官方的测试显示,启用Native AIO,恢复速度可以提高75%。

在InnoDB存储引擎中,read ahead方式的读取都是通过AIO完成,脏页的刷新,即磁盘的写入操作则全部由AIO完成。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:2.6.3 自适应哈希索引
下一篇:2.6.5 刷新邻接页
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站