INNODB引擎概述

2022-02-03 02:44:48 字數 2785 閱讀 1843

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,行鎖設計, mvcc

innodb1.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 最有效地利用 以及...