1. 程式人生 > 其它 >innodb之關鍵特性非同步IO

innodb之關鍵特性非同步IO

1.前言

  為了提高磁碟操作效能,當前的資料庫系統都採用非同步IO(Asynchronous IO,AIO)的方式來處理磁碟操作

2.AIO

  非同步IO相較於同步IO而言的是,當它每掃描一個頁之後不需要等待其完成就可以再進行掃描下一次的掃描,另外一個優勢是可以進行IO merge操作,也就是可以將多個IO合併成一個IO,這樣就可以提高IOPS的效能,例如使用者需要訪問頁的(space,page_no)為:(8,6)、(8,7)、(8,8) 每個頁的大小為16K,那麼同步IO需要進行3次IO操作。而AIO會判斷到這三個頁是連續的(顯然可以通過(space ,page_no)得知)。因此AIO底層會發送一個IO請求,從(8,6)開始,讀取48kb的頁

  在innodb1.1x之前,AIO的實現通過innodb儲存引擎中的程式碼來模擬實現。而從innodb1.1.x開始(innodb plugin不支援),提供了核心級別的AIO的支援,稱為Native AIO,因此在編譯或者執行該版Mysql時,需要libaio庫的支援。需要注意的是,Native AiO需要作業系統提供支援。Windows系統和Linux系統都Native AIO支援,而MAC os上面未提供。

root@localhost 14:53:  [liulin]> show variables like '%innodb_use%';
+-----------------------+-------+
| Variable_name | Value | +-----------------------+-------+ | innodb_use_native_aio | ON | +-----------------------+-------+ 1 row in set (0.00 sec)

  通過檢視該引數是預設開始狀態,使用者可以通過開啟和關閉Native AIO功能來比較Innodb效能的提升。官方顯示,啟用Native AIO,恢復速度可以提高75%

  在innodb儲存引擎中,read ahead方式的讀取都是通過AIO完成,髒頁的重新整理,即磁碟的寫入操作則全部是由AIO完成。