Mysql中InnoDB引擎的鎖

2022-03-23 11:22:32 字數 1242 閱讀 6962

鎖這種機制的作用:對共享資源併發訪問的管理,保證資料的完整性和一致性。

在資料庫中,lock與latch都可以被稱為」鎖「,但是兩者的含義是完全不同的。

lock針對的物件是事務,它用來鎖定資料庫中的物件,如表、頁、行。一般lock的物件僅在事務commit或者rollback後進行釋放,並且lock是有死鎖機制的。

latch一般稱為閂鎖(輕量級的鎖),因為其要求的鎖定時間必須非常短,若持續的時間長,則應用的效能會非常差。在innodb儲存引擎中,latch又可以分為mutex(互斥量)和 rwlock(讀寫鎖)。latch的目的是保證併發執行緒操作臨界資源的正確性,並且通常沒有死鎖檢測的機制。

innodb儲存引擎實現了如下兩種標準的行級鎖:共享鎖(s lock)和排他鎖(x lock)。

共享鎖:事務要想讀取一行資料,需要獲取共享鎖。

排他鎖:允許事務刪除或者更新一行資料。

共享鎖與排他鎖的相容性如下表:

x                      

s                   

x不相容

不相容s

不相容相容

innodb儲存引擎支援多粒度(granular)鎖定,這種鎖定允許事務在行級上的鎖和表級上的鎖同時存在。為了支援在不同粒度上進行加鎖操作,innodb儲存引擎支援一種額外的鎖方式,稱之為意向鎖(intention lock)。

innodb儲存引擎的意向鎖設計比較簡練,其意向鎖即為表級別的鎖。設計目的主要是為了在乙個事務中揭示下一行將被請求的鎖型別。支援的意向鎖有兩種:意向共享鎖(is lock)和意向排他鎖(ix lock):

is lock:事務想要獲取一張表中某幾行的共享鎖;

ix lock:事務想要獲取一張表中某幾行的排他鎖。

意向鎖是將鎖定的物件分為多個層次,如果需要對頁上的記錄進行上x鎖,那麼分別需要對資料庫、表、頁上意向鎖ix,最後對記錄上x鎖。若其中任何乙個部分導致等待,那麼該操作需要等待粗粒度鎖的完成。

由於innodb儲存引擎支援的是行級別的鎖,因此意向鎖其實不會阻塞除全表掃以外的任何請求。表級意向鎖與行級鎖的相容性如下表:

is             

ix            

s             

x             

is相容

相容相容

不相容ix

相容相容

不相容不相容s相容

不相容相容

不相容x

不相容不相容

不相容不相容

MySql中InnoDB引擎索引

mysql中innodb引擎的索引分兩類,一類是一級索引 主鍵的同義詞 一類是二級索引 非主鍵的索引 兩類索引都使用b tree形式組織,但一級索引的葉子節點包含所以對應的整行資訊,所有的查詢最終都是通過一級索引完成,二級索引只包含二級索引對應的一級索引。所以直接使用一級索引比用二級索引快,因為少了...

MySql中啟用InnoDB資料引擎

1.mysql支援的資料引擎列表如下 2.其中預設的是myisam資料引擎,可惜此引擎不支援事務處理,我們需要將預設的資料引擎改為innodb。3.innodb和berkeleydb支援事務處理,可惜預設的情況下都是被disable的。所有的引擎裡面,innodb效能最強大,算是商業級的。4.啟動i...

mysql中innodb引擎的行鎖

一 資料庫引擎 mysql常用的資料庫引擎也就是myisam和innodb兩種,相比較起myisam而言innodb支援了事務 外來鍵等功能,具有更好的併發性支援,所以在大併發的情況的下我們一般選擇的是innodb來作為我們的資料庫儲存引擎,而myisam相較innodb的執行效能上會有更好的表現,...