InnoDB儲存引擎——後臺執行緒
1、InnoDB儲存引擎概述
InnoDB儲存引擎是第一個完整支援ACID事務的MySql儲存引擎,其特點是行鎖設計、支援MVCC、支援外來鍵、提供一致性非鎖定讀,同時被設計用來最有效地利用以及使用CPU和記憶體。
2、InnoDB體系結構
上圖是InnoDB儲存引擎的體系結構,可以看到InnoDB儲存引擎有很多記憶體塊,這些記憶體塊組成了一個大的記憶體池,負責如下工作:
- 維護所有程式/執行緒需要訪問的多個內部資料結構;
- 快取磁碟上的資料,方便快速地讀取,同時在對磁碟檔案的資料修改之前在這裡快取。
- 重做日誌(redo log)緩衝。
後臺執行緒的主要作用是負責重新整理記憶體池中的資料,保證緩衝池中的記憶體快取是最近的資料 。此外,還將已經修改的資料檔案重新整理到磁碟檔案,同時保證在資料庫發生異常的情況下InnoDB能恢復到正常執行狀態。
InnoDB儲存引擎是多執行緒的模型,後臺有多個不同的後臺執行緒,負責處理不同的任務。
- Master Thread
Master Thread是一個非常核心的後臺執行緒,主要負責將緩衝池中的資料非同步重新整理到磁碟,保證資料的一致性,包括髒頁的重新整理、合併插入緩衝、UNDO頁的回收等。 - IO Thread
在 InnoDB儲存引擎中大量使用非同步IO來處理寫IO請求,這樣可以極大地提高資料庫的效能。
而IO Thread的工作主要是負責這些IO請求的回撥處理。目前有4個read thread和4個write thread和1個insert thread和1個log IO thread。
通過下面的命令觀察IO thread:
mysql> show engine innodb status\G
下面是部分輸出:
show engine innodb status
--------
FILE I/O
--------
I/O thread 0 state: waiting for completed aio requests (insert buffer thread)
I/O thread 1 state: waiting for completed aio requests (log thread)
I/O thread 2 state: waiting for completed aio requests (read thread)
I/O thread 3 state: waiting for completed aio requests (read thread)
I/O thread 4 state: waiting for completed aio requests (read thread)
I/O thread 5 state: waiting for completed aio requests (read thread)
I/O thread 6 state: waiting for completed aio requests (write thread)
I/O thread 7 state: waiting for completed aio requests (write thread)
I/O thread 8 state: waiting for completed aio requests (write thread)
I/O thread 9 state: waiting for completed aio requests (write thread)
- purge thread
事務被提交之後,其所使用的undolog可能不在需要了,因此需要Purge Thread來回收已經使用並分配的undo頁。
在InnoDB1.1版本之前,purge操作是在Master thread中完成的。從1.1版本開始,purge操作可以獨立到單獨的執行緒中,以此來減輕master thread的工作。不過,需要在配置檔案中新增如下命令才可以啟用獨立的Purge Thread:
[mysqld]
innodb_purge_threads=1
從版本1.2開始,InnoDB支援多個Purge Thread,這樣的目的是為了進一步加快undo頁的回收。
通過下面命令可以檢視InnoDB開啟了多少個purge thread:
mysql> show variables like 'innodb_purge_threads';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| innodb_purge_threads | 0 |
+----------------------+-------+
1 row in set (0.00 sec)
可以看到我的沒有配置purge thread為獨立的執行緒。
- Page Cleaner Thread
Page Cleaner Thread是在InnoDB1.2.X版本中引入的。其作用是將之前版本中髒頁的重新整理操作都放入到單獨的執行緒中來完成。
其目的是減輕master thread的工作以及對於使用者查詢執行緒的阻塞,進一步提高InnoDB儲存引擎的效能。
相關文章
- MySQL InnoDB儲存引擎MySql儲存引擎
- MySQL中InnoDB儲存引擎的實現和執行原理MySql儲存引擎
- MySQL 配置後臺InnoDB I/O執行緒數MySql執行緒
- InnoDB儲存引擎簡介儲存引擎
- 深入解讀MySQL InnoDB儲存引擎Update語句執行過程MySql儲存引擎
- MySQL InnoDB 儲存引擎探祕MySql儲存引擎
- 14.1 InnoDB 儲存引擎介紹儲存引擎
- InnoDB儲存引擎MVCC實現原理儲存引擎MVC
- 第二章 InnoDB儲存引擎儲存引擎
- 你真的瞭解Innodb儲存引擎?儲存引擎
- MySQLInnoDB儲存引擎(一):精談innodb的儲存結構MySql儲存引擎
- MySQL原理 - InnoDB引擎 - 行記錄儲存 - Off-page 列MySql
- InnoDB儲存引擎鎖機制(一、案例)儲存引擎
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- innodb儲存引擎鎖的實現(一)儲存引擎
- 《MySQL 效能優化》之 InnoDB 儲存引擎MySql優化儲存引擎
- [Mysql技術內幕]Innodb儲存引擎MySql儲存引擎
- MySQL InnoDB儲存引擎體系結構MySql儲存引擎
- 後臺執行緒(daemon)執行緒
- MyISAM與innoDB儲存引擎有何差別儲存引擎
- MySQL儲存引擎:MyISAM和InnoDB的區別MySql儲存引擎
- 十八、Mysql儲存引擎並不只有MyISAM、InnoDB——精髓MySql儲存引擎
- MySQL高階10-InnoDB引擎儲存架構MySql架構
- 每日分享-MySQL-2019-08-05-【InnoDB 儲存引擎】MySql儲存引擎
- 總結MySQL儲存引擎MyISAM與InnoDB區別MySql儲存引擎
- openGauss儲存技術(一)——行儲存引擎儲存引擎
- mysql後臺執行緒詳解MySql執行緒
- mysql儲存引擎InnoDB詳解,從底層看清InnoDB資料結構MySql儲存引擎資料結構
- InnoDB儲存引擎鎖機制(五、 常見問題)儲存引擎
- InnoDB儲存引擎鎖機制(二、 鎖的型別)儲存引擎型別
- 談談MySQL InnoDB儲存引擎事務的ACID特性MySql儲存引擎
- MySQL三種InnoDB、MyISAM和MEMORY儲存引擎對比MySql儲存引擎
- MySQL:Innodb purge執行緒略解MySql執行緒
- 三分鐘入門 InnoDB 儲存引擎中的表鎖和行鎖儲存引擎
- 故障分析 | Federated 儲存引擎表導致監控執行緒處於 Opening table 狀態儲存引擎執行緒
- InnoDB儲存引擎鎖機制(三、鎖的演算法)儲存引擎演算法
- MySQL兩種儲存引擎: MyISAM和InnoDB 簡單總結MySql儲存引擎
- MySQL儲存引擎簡介及MyISAM和InnoDB的區別MySql儲存引擎
- MySQL innodb引擎的事務執行過程MySql