InnoDB儲存引擎——非同步IO
為了提高磁碟操作效能,當前的資料庫系統都採用非同步IO(Asynchronous IO,AIO)的方式來處理磁碟操作。InnoDB儲存引擎就是這樣。
AIO的概念
與AIO對應的Sync IO,即每進行一次IO操作,需要等待此操作結束才能繼續接下來的操作。但是如果使用者發出的是一條索引掃描的查詢,那麼這條SQL查詢語句可能需要掃描多個索引頁,也就是需要進行多次的IO操作。在每掃描一個頁並等待其完成後再進行下一次的掃描,這是沒有必要的。使用者可以在發出一個IO請求後立即再發出另一個IO請求,當全部IO請求傳送完畢後,等待所有IO操作的完成,這就是AIO。
IO Merge
AIO另一個優勢是進行IO Merge操作,也就是將多個IO合併為1個IO,這樣可以提高IOPS的效能。例如使用者需要訪問頁的(space, offset)為:
(8,6),(8,7),(8,8)
每個頁的大小為16KB,那麼同步IO需要進行3次IO操作。而AIO會判斷到這三個頁是連續的(可以通過(space,offset)知道)。因此AIO底層會傳送一個IO請求,從(8,6)開始,讀取48KB的頁。
root@TryHard:~# iostat
Linux 3.13.0-65-generic (TryHard) 03/14/2017 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.11 0.00 0.23 0.02 0.10 99.54
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
xvda 0.31 0.17 2.65 1464569 22747260
在InnoDB1.1.x之前,AIO的實現是通過InnoDB儲存引擎中的程式碼來模擬實現。從InnoDB1.1.x開始,提供了核心級別AIO的支援,稱為Native AIO。因此在編譯或者執行該版本的MySql時,需要libaio庫的支援。
Native AIO需要作業系統提供支援,Windows和Linux系統都提供Native AIO支援,而Mac OSX系統則未提供。
引數innodb_use_native_aio用來控制是否啟動Native AIO,在Linux系統下,預設值為ON。
mysql> show variables like 'innodb_use_native_aio';
+-----------------------+-------+
| 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完成。
相關文章
- MyISAM 儲存引擎,Innodb 儲存引擎儲存引擎
- Innodb儲存引擎儲存引擎
- InnoDB儲存引擎——表儲存引擎
- MySQL InnoDB儲存引擎MySql儲存引擎
- InnoDB儲存引擎簡介儲存引擎
- InnoDB儲存引擎檔案儲存引擎
- Mysql技術內幕InnoDB儲存引擎讀書筆記--《二》InnoDB儲存引擎MySql儲存引擎筆記
- MySQL InnoDB 儲存引擎探祕MySql儲存引擎
- InnoDB儲存引擎——兩次寫儲存引擎
- InnoDB儲存引擎——記憶體儲存引擎記憶體
- InnoDB儲存引擎——Checkpoint技術儲存引擎
- InnoDB儲存引擎——插入緩衝儲存引擎
- 你真的瞭解Innodb儲存引擎?儲存引擎
- InnoDB儲存引擎MVCC實現原理儲存引擎MVC
- 14.1 InnoDB 儲存引擎介紹儲存引擎
- innodb儲存引擎備份工具--Xtrabackup儲存引擎
- [Mysql技術內幕]Innodb儲存引擎MySql儲存引擎
- InnoDB儲存引擎鎖機制(一、案例)儲存引擎
- innodb儲存引擎鎖的實現(一)儲存引擎
- MySQL InnoDB儲存引擎體系結構MySql儲存引擎
- 《MySQL 效能優化》之 InnoDB 儲存引擎MySql優化儲存引擎
- InnoDB儲存引擎——後臺執行緒儲存引擎執行緒
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- MySQL技術內幕:InnoDB儲存引擎MySql儲存引擎
- MySQLInnoDB儲存引擎(一):精談innodb的儲存結構MySql儲存引擎
- MyISAM與innoDB儲存引擎有何差別儲存引擎
- MySQL儲存引擎:MyISAM和InnoDB的區別MySql儲存引擎
- InnoDB儲存引擎——Master Thread工作方式儲存引擎ASTthread
- InnoDB儲存引擎——自適應雜湊索引儲存引擎索引
- MySQL儲存引擎MyISAM與InnoDB的優劣MySql儲存引擎
- Mysql核心:INNODB儲存引擎--《十一》Insert BufferMySql儲存引擎
- MySQL核心InnoDB儲存引擎(卷1)筆記MySql儲存引擎筆記
- Mysql innodb儲存引擎的效能最佳化MySql儲存引擎
- 總結MySQL儲存引擎MyISAM與InnoDB區別MySql儲存引擎
- 十八、Mysql儲存引擎並不只有MyISAM、InnoDB——精髓MySql儲存引擎
- MySQL高階10-InnoDB引擎儲存架構MySql架構
- MySQL 5.6 InnoDB儲存引擎體系結構圖MySql儲存引擎
- 《MySQL技術內幕:InnoDB儲存引擎》連載MySql儲存引擎