mysql5.6對kernel_mutex的優化

參考自:http://blogs.innodb.com/wp/2011/04/mysql-5-6-innodb-scalability-fix-kernel-mutex-removed/


在mysql5.5以及之前的版本,kernel_mutex一直是性能的大殺器,在innodb層,被廣泛的使用。全局鎖是大招,殺死一大片的。之前percona將buffer pool mutex進行了拆分,性能得到了很大的提高。

幸運的是,mysql官方已經意識到了這個問題,在5.6裏已經把kernel_mutex給幹掉了;
不幸的是,離用上生產環境還遙遙無期。


kernel_mutex主要用於保護innodb子系統,主要包括如下幾個模塊:

1.鎖管理
2.事務系統
3.MVCC
當上述子模塊的狀態發生變化時,都需要持有該鎖。


在5.6里根據模塊對kernel_mutex進行了拆分,主要分成了以下幾個鎖:
trx_sys_t::lock (rw_lock)
讀寫鎖,用來保護全局事務鏈表,該鏈表在創建read_view或執行類似‘show engine innodb status’這樣的命令時會被用到。
當開啓事務或結束事務(commit/rollback)時會修改鏈表

trx_t::mutex
當事務的狀態等發生變化時,需要持有該鎖(mutex_own(&t->mutex))

lock_sys_t::mutex 和 lock_sys_t::wait_mutex
用於保護全局鎖數據結構

通過這種拆分可以提高innodb的併發能力。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章