mysql 中的 latch鎖和Tlock(事務鎖), DML加鎖規則,以及死結分析

來源:互聯網
上載者:User

標籤:事務   tar   聚集   key   作用   href   一個   案例分析   upd   

mysql 中的 latch鎖和Tlock(事務鎖), DML加鎖規則,以及死結分析。

 

一.Latch和Tlock的關係

 

Latch:為保護臨界資源的正確性而設計,例如保護正在使用的記憶體頁面不被破壞等。

沒有死結檢測機制,輕量鎖,並且作用對象時記憶體頁面或是記憶體共用變數.

 

Tlock:事務鎖,作用對象是事務,有死結檢測機制.

在innodb內部,為了減少死結的發生機率,Latch不會等待Tlock.

 

線程擷取行鎖的流程:

在對行加鎖的時候會先對行所在的頁面添加lath,然後再對行添加Tlock,待對行添加完Tlock後再釋放頁面的Lath。

這種機制主要是為了保證線程擷取的行資料的一致性和完整性.

如果行被其他的線程佔有,線程先釋放頁面latch,等待行鎖,待擷取行鎖後會再次對頁面添加latch,查看頁面資料是否有改動,再次擷取改動後的行。

 

 

二.DML加鎖規則

DML加鎖的語句有,insert/update ... where ..../ delete from  .. where .. /  select * from  

 

insert不添加鎖,但是在有唯一所以的時候,會對唯一索引做唯一性檢查(加s鎖,在將s鎖轉化為x鎖),都是行鎖。

 

update ... where.. / delete ... where ../select ... where lock in share mode / select .. where .. for update 

 

(1).資料尋找走了索引,但是運算式為不等號,則會添加區間鎖(gap).

例如. > 10  ,則鎖定區間為(10,+~)

<10 ,則鎖定區間為(-~,10) .

 

(2).資料尋找走的唯一索引,並且運算式為等號(=),則添加行鎖(record lock but not gap) 。

 

(3).資料尋找為非唯一索引,並且運算式為等號,會添加區間鎖(record lock gap),會鎖定的區間為( ] ,允許更新,不允許插入.

 

重點:區間鎖是為了防止出現幻覺讀的,所以只阻塞插入操作.對更新不影響

 

 

三.死結案例分析.

 

(1).insert,並發插入相同的資料,並且插入欄位中有唯一鍵存在,

在正常的插入過程中是不會添加任何鎖的,但是在有唯一鍵的時候會對唯一鍵的欄位做唯一性檢查,在檢查的過程中會對記錄共用鎖定(S),

當多個線程對同一行添加共用鎖定(S)之後,會將共用鎖定(s)轉化為獨佔鎖定(X),此時就會相互等待,產生死結.

 

(2).update並發更新,更新的欄位有索引

線程一根據索引欄位更新一個行,線程二根據主鍵更新索引欄位.

此時線程一獲得了索引等待行 ,線程二獲得了行等待索引。

 

(3)delete,根據某一個唯一索引欄位並發刪除記錄。

過程非常複雜,詳情見一下連結:

http://www.cnblogs.com/sunss/p/3166550.html

 

 

(4).insert和delete並發,有非叢集索引

線程1根據某個非叢集索引欄位刪除資料,線程2插入相同的記錄。

線程1獲得了索引,等待行,線程2獲得了行,等待索引。

 

(5).insert 和update並發,有非叢集索引。

死結原理同4.

 

(6)delete 和update 並發.

原理同2.

 

 

死結案例串連:

innodb next-key lock引發的死結:

http://www.cnblogs.com/xhan/p/3701459.html

唯一鍵造成的死結:

http://www.cnblogs.com/sunss/p/3166550.html

mysql中的delete死結

http://hedengcheng.com/?p=844

 

http://dwchaoyue.blog.51cto.com/2826417/1749109

 

(轉)mysql 中的 latch鎖和Tlock(事務鎖), DML加鎖規則,以及死結分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.