linux上,innodb使用異步IO子系統(native AIO)來對數據文件頁進行預讀和寫請求。行為受到參數innodb_use_native_aio控制。
默認是開啟的,且只是適用於linux平台,需要libaio庫。在其他的類unix平台上,innodb使用的是同步I/O。
由於歷史的原因,在windows平台上innodb只使用異步I/O。
在同步I/O情況下,查詢線程將I/O請求放入隊列,innodb后台線程會便利請求隊列,每次處理一個請求。並行處理的請求個數受到后台線程的數量控制(參數innodb_read_io_threads)。
native AIO情況下,查詢線程直接將I/O請求分發給操作系統,從而避免的后台線程數量對並發數的控制。innodb后台線程只需要等待操作系統對IO請求的處理反饋信息。
native AIO優點是可以擴展,對於I/O高的系統,通過show engine innodb status可以看到很多掛起的讀寫線程。磁盤控制器影響I/O性能。
native AIO的另一個優點就是可以進行I/O merge操作。
native AIO潛在的不足是,對於高I/O系統缺少對I/O寫請求分發的控制。有些場景下,太多的I/O寫請求分發給操作系統,可能會導致I/O讀飢荒,這取決於系統可以同時處理I/O活動的能力。