为了提高磁盘操作性能,当前的数据库系统都采用异步IO(Asynchronous IO,AIO)的方式来处理磁盘操作。InnoDB存储引擎就是这样。
AIO的概念
与AIO对应的Sync IO,即每进行一次IO操作,需要等待此操作结束才能继续接下来的操作。但是如果用户发出的是一条索引扫描的查询,那么这条SQL查询语句可能需要扫描多个索引页,也就是需要进行多次的IO操作。在每扫描一个页并等待其完成后再进行下一次的扫描,这是没有必要的。用户可以在发出一个IO请求后立即再发出另一个IO请求,当全部IO请求发送完毕后,等待所有IO操作的完成,这就是AIO。
IO Merge
AIO另一个优势是进行IO Merge操作,也就是将多个IO合并为1个IO,这样可以提高IOPS的性能。例如用户需要访问页的(space, offset)为:
(8,6),(8,7),(8,8)
每个页的大小为16KB,那么同步IO需要进行3次IO操作。而AIO会判断到这三个页是连续的(可以通过(space,offset)知道)。因此AIO底层会发送一个IO请求,从(8,6)开始,读取48KB的页。
root@TryHard:~# iostat
Linux 3.13.0-65-generic (TryHard)