innodb儲存引擎是oltp應用中核心表的首選儲存引擎。
innodb儲存引擎包含在所有mysql資料庫的二進位制發行版本中。早期其版本隨著mysql資料庫的更新而更新。
從mysql5.1開始,mysql資料庫允許儲存引擎開發商以動態形式載入引擎,這樣儲存引擎的更新可以不受mysql資料庫版本的限制。
mysql5.1中,可以支援兩個版本的innodb,乙個是靜態編譯的innodb版本,可以將其看作老版本的innodb,另外乙個是動態載入的innodb版本,官方稱為innodb plugin,或者innodb1.0.
mysqk5.5又將innodb版本公升級到了1.1x
mysql5.6又將其公升級到了1.2x
各版本之間的比較
老版本的innodb: 支援acid,行鎖設計, mvccinnodb1.0x 繼承了上述版本的所有功能,增加了compress和dynamic頁格式
innodb1.1x 繼承了上述版本的所有功能,增加了linux aio,多回滾段
innodb
innodb的後台執行緒主要作用:重新整理記憶體池中的資料,保證緩衝池中的記憶體快取的是最近的資料。 其二:將已修改的資料檔案重新整理到磁碟檔案,同時保證資料庫發生異常的情況下innodb能恢復到正常狀態。
innodb儲存引擎是多執行緒模型,後台有許多不同的後台執行緒。
是乙個非常核心的後台執行緒,主要負責將緩衝池中的資料非同步重新整理到磁碟,保證資料的一致性。
在innodb儲存引擎中大量使用了aio(非同步io)來處理io請求,這樣可以大大提高資料庫的效能。
有四種io thread分別為: read, write, insert buffer和log io thread。
預設情況下read thred和write thread分別為4個:
mariadb [(none)]> show engine innodb status\g
--------
i/o thread
0state:
waiting for completed aio requests (insert buffer thread)
i/o thread
1state:
waiting for completed aio requests (log thread)
i/o thread
2state:
waiting for completed aio requests (read thread)
i/o thread
3state:
waiting for completed aio requests (read thread)
i/o thread
4state:
waiting for completed aio requests (read thread)
i/o thread
5state:
waiting for completed aio requests (read thread)
i/o thread
6state:
waiting for completed aio requests (write thread)
i/o thread
7state:
waiting for completed aio requests (write thread)
i/o thread
8state:
waiting for completed aio requests (write thread)
i/o thread
9state: waiting for completed aio requests (write thread)
如上讀執行緒的id總是小於寫執行緒的id。
讀寫執行緒的個數可以通過如下兩個引數控制:
mariadb [(none)]> show variables like "innodb_%io_threads"\g
***************************
1. row ***************************
variable_name:
innodb_read_io_threads
value:
4***************************
2. row ***************************
variable_name:
innodb_write_io_threads
value:
42 rows in set (0.01
sec)
mariadb [(none)]>
3: purge thread
事務被提交之後,其所使用的的undo log可能不再需要,因此需要使用purge thread來**已經使用並分配的undo頁。在innodb1.1之前,purge僅在master thread中完成。innodb1.1之後可以用乙個單獨的執行緒來完成。
innodb_purge_threads=1 #可以在配置檔案中指定#在innodb1.2之後其引數的值可以設定為大於1,可以啟動多個purge thread執行緒
4:page cleaner thread
在innodb1.2版本之後引入的,作用是將之前版本中髒頁重新整理操作放入單獨的執行緒,減輕master thread的負擔。
參考書籍【mysql 技術內幕 --innodb儲存引擎】
InnoDB儲存引擎概述 概述
重新整理記憶體池資料,保證記憶體快取的是最新的資料,將已修改的資料檔案重新整理到磁碟中,資料庫發生異常時innodb能恢復至正常執行狀態.負責將緩衝池中的資料非同步重新整理到磁碟,保證資料的一致性,包括髒頁的重新整理,合併插入緩衝,undo頁的 async io處理io請求,四種thread wri...
InnoDB 儲存引擎
innodb是事務型資料庫的首選引擎,支援事務安全表 acid 支援行鎖定和外來鍵。mysql 5.5.5 之後,innodb作為預設儲存引擎。innodb的主要特性有一下幾項。a.innodb給mysql提供了具有提交 回滾和崩潰恢復能力的事務安全 acid相容 儲存引擎。innodb鎖定在行級並...
InnoDB 儲存引擎
設計上採用了類似於oracle資料庫的架構 接下來 詳細介紹 innodb 儲存引擎的 體系架構 及其不同於其他儲存引擎的特性 一 概述 innodb 儲存引擎 是第乙個完整支援acid事物的 mysql 儲存引擎 特點 1 行鎖設計 2 支援mvcc 3 提供一致性非鎖定讀 4 最有效地利用 以及...