异步IO & 刷新邻接页
异步IO
一条SQL
可能需要扫描多个索引页,也就是进行多次IO
操作。异步IO
可以
同时进行发起多个IO
,之后等待这些IO
完成。
异步IO
还有一个优势是可以进行IO Merge
操作,将多个IO
合并为一个IO
,
这样可以提高IOPS
的性能。(前提是查询的页正好是连续的)
IOPS
:input/output operations per second
刷新邻接页
InnoDB
存储引擎还提供了Flush Neighbor Page
(刷新邻接页)的特性。其工作原理为:
当刷新一个脏页时,InnoDB
存储引擎会检测该页所在区(extent)的所有页,如果是脏页,
那么一起进行刷新。
这样的好处是可以通过AIO
将多个IO
写入操作合并为一个IO
操作,该工作机制在传统
机械磁盘下有着显著的优势。但需要考虑下面两个问题
- 是不是可能将不怎么脏的页进行写入,而该页之后又很快变脏
- 固态硬盘有较高的
IOPS
,是否还需要这个特性
InnoDB
存储引擎从1.2.x版本开始提供了参数innodb_flush_neighbors
,用于控制是否
开启该特性。对于固态硬盘建议关闭。