1. IO Thread
在 InnoDB
中使用了大量的 AIO(Async IO)
來做讀寫處理壹无,這樣可以極大提高數(shù)據(jù)庫的性能赔硫。在 InnoDB 1.0
版本之前共有 4
個IO Thread
纳像,分別是write
斑举,read
芹血,insert buffer
和 log thread
,后來版本將 read thread
和 write thread
分別增大到了 4
個移迫,一共有 10
個了。
-
read thread
: 負責讀取操作管行,將數(shù)據(jù)從磁盤加載到緩存page
頁厨埋。4
個
write thread
:負責寫操作,將緩存臟頁刷新到磁盤捐顷。4
個
log thread
:負責將日志緩沖區(qū)內容刷新到磁盤荡陷。1
個
insert buffer thread
:負責將寫緩沖內容刷新到磁盤。1
個
SHOW ENGINE INNODB STATUS
2. Purge Thread
事務提交之后迅涮,其使用的 undo
日志將不再需要废赞,因此需要 Purge Thread
回收已經(jīng)分配的 undo
頁。
-- 最多刪除的 undo 頁
SHOW VARIABLES LIKE '%innodb_purge_batch_size%';
SHOW VARIABLES LIKE '%innodb_purge_threads%'
3. Page Cleaner Thread
作用是將臟數(shù)據(jù)刷新到磁盤叮姑,臟數(shù)據(jù)刷盤后相應的 redo log
也就可以覆蓋唉地,即可以同步數(shù)據(jù),又能達到 redo log
循環(huán)使用的目的传透。會調用 write thread
線程處理耘沼。
show variables like '%innodb_page_cleaners%';
4. Master Thread
Master thread
是 InnoDB
的主線程,負責調度其他各線程朱盐,優(yōu)先級最高群嗤。作用是將緩沖池中的數(shù)據(jù)異步刷新到磁盤 ,保證數(shù)據(jù)的一致性兵琳。包含:臟頁的刷新(page cleaner thread
)狂秘、undo
頁回收(purge thread
)、redo
日志刷新(log thread
)躯肌、合并寫緩沖等者春。內部有兩個主處理,分別是每隔 1
秒和 10
秒處理羡榴。
4.1 每1秒的操作
- 刷新日志緩沖區(qū)碧查,刷到磁盤
- 合并寫緩沖區(qū)數(shù)據(jù),根據(jù)
IO
讀寫壓力來決定是否操作 - 刷新臟頁數(shù)據(jù)到磁盤校仑,根據(jù)臟頁比例達到
75%
才操作忠售,可以根據(jù)下面兩個參數(shù)查看相應的值(innodb_max_dirty_pages_pct
,innodb_io_capacity
)
SHOW VARIABLES LIKE '%innodb_max_dirty_pages_pct%'
SHOW VARIABLES LIKE '%innodb_io_capacity%'
4.2 每10 秒的操作
- 刷新臟頁數(shù)據(jù)到磁盤
- 合并寫緩沖區(qū)數(shù)據(jù)
- 刷新日志緩沖區(qū)
- 刪除無用的
undo
頁