InnoDB體系構架

在InnoDB存儲引擎的架構中,有多個內存塊,這些內存塊組成一個內存池。InnoDB存儲引擎體系架構以下圖所示:數據庫

innodb構架

後臺線程

後臺線程的主要做用是負責刷新內存池中的數據,保證緩衝池中的內存緩存的是最近的數據,另外,將已修改的數據文件刷新到磁盤文件,同時,保證在數據庫發生異常的狀況下,InnoDB能恢復到正常運行狀態。InnoDB是多線程模型,不一樣的線程用於處理不一樣的任務。緩存

Master Thread

Master Thread是核心後臺線程,主要負責將緩衝池中的數據異步刷新到磁盤,包括髒頁的刷新,合併插入緩衝(insert buffer),undo頁的回收等。多線程

IO Thread

IO Thread負責IO請求的回調。主要有read, write, insert buffer和log IO Thread。其中read thread和write thread分別使用innodb_read_io_threadsinnodb_write_io_threads參數進行設置。能夠經過命令show engine innodb status來查看InnoDB中的IO Thread:架構

I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (read thread)
I/O thread 4 state: waiting for i/o request (read thread)
I/O thread 5 state: waiting for i/o request (read thread)
I/O thread 6 state: waiting for i/o request (write thread)
I/O thread 7 state: waiting for i/o request (write thread)
I/O thread 8 state: waiting for i/o request (write thread)
I/O thread 9 state: waiting for i/o request (write thread)

能夠看到IO Thread 0爲insert buffer thread,IO Thread 1爲log thread。以後根據參數innodb_read_io_threadsinnodb_write_io_threads來設置讀寫線程,而且讀線程ID老是小於寫線程。併發

Purge Thread

事務被提交後,其所使用的undolog可能再也不須要,Purge Thread負責回收undo頁。在InnoDB1.1版本以前,purge操做僅在Master Thread中完成。InnoDB1.1開始,purge操做能夠獨立在Purge Thread中進行。經過以下配置來啓用獨立的Purge Thread:異步

innodb_purge_threads=1

InnoDB1.2版本開始支持多個Purge Thread,加快undo頁的回收。因爲是離散地讀取undo頁,也能更進一步利用磁盤的隨機讀取性能。高併發

Page Cleaner Thread

InnoDB1.2版本引入了Page Cleaner Thread。做用是將髒頁刷新操做都放到單獨的線程中來完成,從而減輕Master Thread的工做。性能

InnoDB緩衝池

InnoDB引擎是基於磁盤存儲的,將數據記錄按照頁的方式進行管理。對數據庫頁的修改操做,首頁修改緩衝池中的頁,而後再按照某種頻率刷新到磁盤上,這種頻率的控制是經過一種稱爲Checkpoint的機制來實現。緩衝池的大小直接影響到數據庫的總體性能,其經過參數innodb_buffer_pool_size來設置,額外內存池經過參數innodb_additional_mem_pool_size來設置。線程

InnoDB緩衝池包含的數據頁類型有:索引頁,數據頁,undo頁,插入緩衝(insert buffer),自適應哈希索引,InnoDB存儲的鎖信息,數據字典信息等。結構圖以下:code

innodb構架

InnoDB1.0.X版本開始,容許有多個緩衝池實現。page根據哈希平均分配到不一樣的緩衝池實例中,用來減小資源競爭,提升併發。能夠經過參數innodb_buffer_pool_instances進行配置。

相關文章
相關標籤/搜索