这里先解释下什么是同步I/O,什么是异步I/O。在同步文件I/O中,线程启动一个I/O操作后会立即进入等待状态,直到I/O操作完成才醒来继续执行。而在异步文件I/O方式中,线程发送一个I/O请求到内核,然后继续处理其他的事情,内核完成I/O请求后,将会通知线程I/O操作完成了。简单地说,如果是同步I/O,当一个I/O操作执行时,应用程序必须等待,直到此I/O执行完毕。相反,异步I/O操作是在后台运行的,I/O操作和应用程序可以同时运行,这就提高了系统性能。因此,像数据库这样的应用往往会利用异步
I/O,使得多个I/O操作可同时执行。
从MySQL5.5.X版本开始,在Linux系统上就实现了异步I/O功能,也就是Linux native AIO,想要使用Linux native AIO,可以利用libaio库,libaio对Linux native AIO的系统调用进行了简单的封装,当然,也可以直接通过系统调用来使用Linux native AIO。
在使用libaio之前,你要先安装libaio rpm包,命令如下:
yum install libaio -y
[root@TestPrfServer ~]# rpm -qa | grep libaio
libaio-0.3.106-5
libaio-0.3.106-5
[root@TestPrfServer ~]#
可以通过innodb_use_native_aio参数来选择是否启用异步I/O,默认是ON,即处于开启状态,此参数不支持动态修改。
下面分别是MySQL5.5.X和MySQL5.1.X启动时的信息,分别如图1-6和图1-7所示。在MySQL5.5.X版本中可以看到关于Linux native AIO的信息。
下面通过cat /proc/slabinfo | grep kio命令,来查看异步I/O是否能工作正常(如图1-8所示)。
如果kiocb那项不为0,代表异步I/O已工作。