MySQL -- 異步I/O


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活動的能力。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM