7 MySQL鎖機制 資料庫核心技術之一

2021-10-24 18:03:30 字數 1528 閱讀 3527

為了保證資料併發訪問時的一致性和有效性,任何乙個資料庫都存在鎖機制

鎖機制的優劣直接影響到資料庫的併發處理能力和系統效能,所以鎖機制也就成為了各種資料庫的核心技術之一。

鎖機制是為了解決資料庫的併發控制問題而產生的。如在同一時刻,客戶端對同乙個表做更新或查詢操作,為了保證資料的一致性,必須對併發操作進行控制。同時,鎖機制也為實現 mysql 的各個隔離級別提供了保證。

可以將鎖機制理解為使各種資源在被併發訪問時變得有序所設計的一種規則。

如何保證資料併發訪問的一致性、有效性是所有資料庫必須解決的乙個問題,鎖衝突也是影響資料庫併發訪問效能的乙個重要因素。從這個角度來說,鎖對資料庫顯得尤其重要,也更加複雜。本節我們先簡單介紹一下鎖機制及常見的鎖型別。

按鎖級別分類,可分為共享鎖、排他鎖和意向鎖

按鎖粒度分類,可分為行級鎖、表級鎖和頁級鎖

下面我們先介紹共享鎖、排他鎖和意向鎖。

共享鎖的代號是 s,是 share 的縮寫,也可稱為讀鎖。是一種可以檢視但無法修改和刪除的資料鎖

共享鎖的鎖粒度是行或者元組(多個行)。乙個事務獲取了共享鎖之後,可以對鎖定範圍內的資料執行讀操作。會阻止其它事務獲得相同資料集的排他鎖。

排他鎖的代號是 x,是 exclusive 的縮寫,也可稱為寫鎖,是基本的鎖型別。

排他鎖的粒度與共享鎖相同,也是行或者元組。乙個事務獲取了排他鎖之後,可以對鎖定範圍內的資料執行寫操作。允許獲得排他鎖的事務更新資料,阻止其它事務取得相同資料集的共享鎖和排他鎖。

如有兩個事務 a 和 b,如果事務 a 獲取了乙個元組的共享鎖,事務 b 還可以立即獲取這個元組的共享鎖,但不能立即獲取這個元組的排他鎖,必須等到事務 a 釋放共享鎖之後才可以。

如果事務 a 獲取了乙個元組的排他鎖,事務 b 不能立即獲取這個元組的共享鎖,也不能立即獲取這個元組的排他鎖,必須等到 a 釋放排他鎖之後才可以。

為了允許行鎖和表鎖共存,實現多粒度鎖機制,innodb 還有兩種內部使用的意向鎖。

意向鎖是一種表鎖,鎖定的粒度是整張表,分為意向共享鎖(is)和意向排他鎖(ix)兩類。

意向共享鎖表示乙個事務有意對資料上共享鎖或者排他鎖。「有意」表示事務想執行操作但還沒有真正執行。

鎖和鎖之間的關係,要麼是相容的,要麼是互斥的。

鎖模式的相容情況

其中共享鎖、排他鎖、意向共享鎖、意向排他鎖相互之間的相容/互斥關係如下表所示,其中 y 表示相容,n 表示互斥。

如果乙個事務請求的鎖模式與當前的鎖相容,innodb 就將請求的鎖授予該事務;反之,如果兩者不相容,該事務就要等待鎖釋放。

為了盡可能提高資料庫的併發量,需每次鎖定的資料範圍越小越好,越小的鎖其耗費的系統資源越多,系統效能下降。為在高併發響應和系統效能兩方面進行平衡,這樣就產生了「鎖粒度」的概念。

MySQL資料庫(7) MySQL 資料備份與還原

1 使用mysqldump命令備份 mysqldump命令將資料庫中的資料備份成乙個文字檔案。表的結構和表中的資料將儲存在生成的文字檔案中。mysqldump命令的工作原理很簡單。它先查出需要備份的表的結構,再在文字檔案中生成乙個create語句。然後,將表中的所有記錄轉換成一條insert語句。然...

MySQL資料庫的鎖機制

原文首發於 本文出自 rebornchang的部落格 拋開資料庫引擎說資料庫鎖機制的都是流氓 引言 mysql資料庫的引擎分為三種,myisam isam innodb以及memory,具體的引擎型別效能比較可以baidu到,這裡就不多說了,本文中所說的鎖機制基於innodb引擎,那為啥說基於inn...

Mysql資料庫的鎖機制

鎖機制 當客戶端操作表 記錄 時,為了保證操作的隔離性 多個客戶端操作不能相互影響 通過加鎖來處理。操作方面 讀鎖 讀操作時增加的鎖,也叫共享鎖,s lock。特徵是所有人都只可以讀,只有釋放鎖之後才可以寫。寫鎖 寫操作時增加的鎖,也叫獨佔鎖或排他鎖,x lock。特徵,只有鎖表的客戶可以操作 讀寫...