insert buffer thread:主要負責插入緩衝區的合併操做算法
read thread:負責數據庫讀取操做sql
write thread:負責數據庫寫操做數據庫
log thread:將日誌刷新到日誌文件中緩存
purge thread:執行purge操做架構
lock thread:鎖控制和死鎖檢測優化
經過如下命令查看進程狀態:spa
show engine innodb status\G
MyISAM中主要優化索引塊緩存,經過合理的優化,讓索引讀寫更高效。操作系統
數據快沒有提供緩存機制,採用操做系統的IO緩存。線程
經過設置 key_buffe_size 決定索引塊大小,通常設置爲可用內存的1/4。日誌
經過如下命令評估索引塊使用情況:
show status like 'key%';
MySQL爲了防止索引塊競爭,能夠手動建立索引塊:
//建立新的索引快 set global cache_name.key_buffer_size=1024*512; //讓索引使用新的索引快 cache index idx_name,idx_name2 in cache_name;
MySQL的索引塊採用LRU算法進行淘汰,可是爲了防止短時間的熱數據將長期熱數據淘汰掉,MySQL採用了中點插入策略。
將LRU分爲兩部分:hot和warm,索引塊緩存後首先進入warm尾部,若是必定時間達到命中次數後,轉移到hot的尾部。hot頭部熱度超出時間則轉移到warm尾部。觸發淘汰機制的時候會首先淘汰warm頭部的數據。用於保證真正的熱數據不會被淘汰掉。
能夠經過設置hot和warm鏈表的大小來進行優化。
主要參數:key_cache_division_limit、key_cache_age_threshold
InnoDB採用一塊內存區做爲IO緩存池,用於索引和數據快的緩存。
緩存池分爲:free list(空閒緩存快)、flush list(待sync緩存塊)、LRU list等部分。
經過調整innodb_buffer_poll_size來設置緩存池大小。
//查看緩存池狀態 show status like 'innodb_buffer%';
能夠經過 Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests 來查看索引命中率。
經過調整innodb_buffer_poll_instances(緩存池數量)來減小線程對於緩存池的競爭。MySQL會根據緩存池的大小和數量平分緩存池。
InnoDB數據也大小爲16KB操做系統的數據頁通常爲4KB,爲了防止數據刷新硬盤的時候沒有完整的寫入,InnoDB採用doublewrite方式。每次刷新數據的時候會先寫入到系統表空間的一塊連續硬盤空間中,而後fsync直接刷新到硬盤做爲備份,以後纔會將數據寫入硬盤。
能夠經過調整 innodb_doublewrite來開啓關閉doublewrite機制。
修改 max_connections 調整最大鏈接數,經過查看connection_errors_mac_connections 的增加來決定曾正最大鏈接數。
修改 back_log 參數控制MySQL監聽端口時積壓請求棧的大小,通常爲鏈接數的五分之一。