91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【MySQL】死鎖案例之三

發布時間:2020-08-09 08:39:59 來源:ITPUB博客 閱讀:174 作者:楊奇龍 欄目:MySQL數據庫
一 前言
      死鎖,其實是一個很有意思,也很有挑戰的技術問題,大概每個DBA和部分開發朋友都會在工作過程中遇見過。關于死鎖我會持續寫一個系列的案例分析,希望能夠對想了解死鎖的朋友有所幫助。
二 背景知識
2.1 insert 鎖機制
在分析死鎖案例之前,我們先學習一下背景知識 insert 語句的加鎖策略。我們先來看看官方定義:

sess1

sess2

begin;


delete from t8 where b = 1;

begin;


insert into t8 values (NULL,1);

commit



update t8 set

T2

begin;

begin;


insert into t7(id,a) values(26,10);

insert into t7(id,a) values(30,10);



insert into t7(id,a) values(40,9);


3.3 死鎖日志
  1. ------------------------
  2. LATEST DETECTED DEADLOCK
  3. ------------------------
  4. 2017-09-17 15:15:03 7f78eac15700
  5. *** (1) TRANSACTION:
  6. TRANSACTION 462308661, ACTIVE 6 sec inserting
  7. mysql tables in use 1, locked 1
  8. LOCK WAIT 2 lock struct(s), heap size 360, 1 row lock(s), undo log entries 1
  9. MySQL thread id 3796966, OS thread handle 0x7f78ead9d700, query id 781045166 localhost root update
  10. insert into t7(id,a) values(30,10)
  11. *** (1) WAITING FOR THIS LOCK TO BE GRANTED:
  12. RECORD LOCKS space id 231 page no 4 n bits 72 index `ua` of table `test`.`t7` trx id 462308661 lock mode S waiting
  13. *** (2) TRANSACTION:
  14. TRANSACTION 462308660, ACTIVE 43 sec inserting, thread declared inside InnoDB 5000
  15. mysql tables in use 1, locked 1
  16. 4 lock struct(s), heap size 1184, 3 row lock(s), undo log entries 2
  17. MySQL thread id 3796960, OS thread handle 0x7f78eac15700, query id 781045192 localhost root update
  18. insert into t7(id,a) values(40,9)
  19. *** (2) HOLDS THE LOCK(S):
  20. RECORD LOCKS space id 231 page no 4 n bits 72 index `ua` of table `test`.`t7` trx id 462308660 lock_mode X locks rec but not gap
  21. *** (2) WAITING FOR THIS LOCK TO BE GRANTED:
  22. RECORD LOCKS space id 231 page no 4 n bits 72 index `ua` of table `test`.`t7` trx id 462308660 lock_mode X locks gap before rec insert intention waiting
  23. *** WE ROLL BACK TRANSACTION (1)
日志分析
我們從時間線維度分析:
T2 insert into t7(id,a) values(26,10)語句insert 成功,持有a=10 的X 行鎖(X locks rec but not gap)
T1 insert into t7(id,a) values(30,10),因為T2 的第一條insert已經插入a=10的記錄,T1的 insert a=10 則發生唯一約束沖突,需要申請對沖突的唯一索引加上S Next-key Lock (也即是 lock mode S waiting ) 這是一個間隙鎖會申請鎖住[4,10],[10,20]之間的gap區域。從這里會發現,即使是RC事務隔離級別,也同樣會存在Next-Key Lock鎖,從而阻塞并發。
T2 insert into t7(id,a) values(40,9) 該語句插入的a=9 的值在 T1申請的gap鎖[4,10]之間,故需T2的第二條insert語句要等待T1的S-Next-key Lock鎖釋放,在日志中顯示lock_mode X locks gap before rec insert intention waiting

四 總結 
  首先感謝登博和姜承堯兩位德藝雙馨的MySQL技術大牛對死鎖技術知識的無私分享。本文案例和知識點一方面從官方文檔獲取,另一方面是根據兩位大牛的分享整理,算是站在巨人的肩膀上的學習總結。在研究分析死鎖案例的過程中,insert 的意向鎖 和 gap 鎖這種類型的鎖是比較難分析的,相信通過上面的分析總結大家能夠學習到 insert的鎖機制 ,如何加鎖,如何進行 insert 方面死鎖分析。
如果各位覺得閱讀本文能夠有所收獲 歡迎 打賞一瓶飲料 
【MySQL】死鎖案例之三
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尼木县| 凤冈县| 芜湖市| 虹口区| 迁西县| 临漳县| 伊通| 稻城县| 高州市| 杨浦区| 文水县| 台江县| 调兵山市| 阿拉尔市| 南部县| 河津市| 宁德市| 丽江市| 阿尔山市| 蓬溪县| 安泽县| 南平市| 田阳县| 灵武市| 博客| 浪卡子县| 镶黄旗| 延吉市| 阆中市| 武汉市| 德惠市| 宝坻区| 介休市| 正安县| 平陆县| 阿合奇县| 思茅市| 光山县| 杭州市| 游戏| 郓城县|