鎖這種機制的作用:對共享資源併發訪問的管理,保證資料的完整性和一致性。
在資料庫中,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的執行效能上會有更好的表現,...