MySQL鎖(鎖級別、鎖優化、避免死鎖)

MySQL鎖

爲了保證數據的一致完整性,任何一個數據庫都存在鎖定機制。鎖定機制的優劣直接影響到一個數據庫系統的併發處理能力和性能,所以鎖定機制的實現也就成爲了各種數據庫的核心技術之一

三種不同的鎖類型

名稱 粒度 併發能力 加鎖和釋放鎖的消耗 出現死鎖概率
row-level 最小 最大 消耗大
page-level
table-level 最大 比較弱 消耗小

鎖機制分析

表級鎖定

使用了:read、read_wait、write、write_wait四個隊列實現

使用方法 : lock table my_table read、lock table my_table write;

行級鎖定

這裏主要說下InnoDB使用了"間隙鎖",也就是,根據鎖定大是一個範圍。

具體可以參考【間隙鎖產生的原因】

鎖優化

目標就是,縮短鎖定的時間。

  • 合理設計索引,避免因爲間隙鎖,而影響到其他Query

  • 能者多勞,搜索的時候儘可能使用索引,並且索引範圍儘可能小,避免因爲無法使用索引加鎖而變成表鎖

  • 業務層面,在同一個事務中,儘可能做到一次鎖定需要的所有資源,減少死鎖產生的概率;

  • 對於非常容易產生死鎖的業務部分,可以嘗試使用升級鎖定顆粒度,通過表級鎖定來減少死鎖產生的概率。

其他

這裏補充下InnoDB 的優點

  • 支持事務安全:READ UNCOMMITTED、READ COMMITTED、REPEATABLE和SERIALIZABLE

  • 鎖定機制的改進

參考文章

瞭解下Mysql的間隙鎖及產生的原因
參考書籍<<MySQL性能調優和架構設計>>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章