异步IO 简介
- Asynchronous IO,AIO
- 用户发出一个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 会判断到这三个页是连续的,因此AIO 底层会发送一个IO请求,从(8, 6)开始,读取48KB的页
AIO 的发展
- InnoDB 1.1.x 之前,AIO 的实现通过InnoDB 存储引擎中的代码来模拟实现
- InnoDB 1.1.x 之后,InnoDB 提供了内核级别的AIO 的支持,称为Native AIO。Native AIO 需要操作系统提供支持,Windows 系统和Linux 系统都提供了native AIO 支持,但是Mac OS 系统则未提供
AIO 带来的性能提升
- 启用Native AIO 恢复速度可以提高75%
AIO在InnoDB存储引擎的使用
- read ahead 方式的读取都是通过AIO 完成的
- 脏页的刷新,即磁盘的写入操作也是全部由AIO 完成