MySQL死鎖排查

JAVA程序

JSTACK或者JVISUALVM都能自動檢查程序死鎖

數(shù)據(jù)庫命令

show engine innodb status


image.png

死鎖是指兩個或兩個以上的進程在執(zhí)行過程中贯要,因爭奪資源而造成的一種互相等待的現(xiàn)象。正常死鎖會自動釋放绽慈,innodb有一個內在的死鎖檢測工具盆佣,當死鎖超過一定時間后,會回滾其中一個事務陨舱,innodb_lock_wait_timeout可配置死鎖等待超時時間翠拣。
死鎖日志案例如下:

------------------------

LATEST DETECTED DEADLOCK

------------------------

111109 20:10:03

*** (1) TRANSACTION:

TRANSACTION 65839, ACTIVE 19 sec, OS thread id 4264 starting index read

mysql tables in use 1, locked 1

LOCK WAIT 6 lock struct(s), heap size 1024, 3 row lock(s), undo log entries 1

MySQL thread id 3, query id 74 localhost 127.0.0.1 root Updating

UPDATE parent SET age=age+1 WHERE id=1

*** (1) WAITING FOR THIS LOCK TO BE GRANTED:

RECORD LOCKS space id 6833 page no 3 n bits 72 index `PRIMARY` of table

`test`.`parent` trx id 65839 lock_mode X locks rec but not gap waiting

Record lock, heap no 2 PHYSICAL RECORD: n_fields 4; compact format; info bits 0

*** (2) TRANSACTION:

TRANSACTION 65838, ACTIVE 26 sec, OS thread id 768 starting index read,

thread declared inside InnoDB 500

mysql tables in use 1, locked 1

7 lock struct(s), heap size 1024, 4 row lock(s), undo log entries 2

MySQL thread id 4, query id 75 localhost 127.0.0.1 root Updating

UPDATE parent SET age=age+1 WHERE id=2

*** (2) HOLDS THE LOCK(S):

RECORD LOCKS space id 6833 page no 3 n bits 72 index `PRIMARY` of table

`test`.`parent` trx id 65838 lock_mode X locks rec but not gap

Record lock, heap no 2 PHYSICAL RECORD: n_fields 4; compact format; info bits 0

*** (2) WAITING FOR THIS LOCK TO BE GRANTED:

RECORD LOCKS space id 6833 page no 3 n bits 72 index `PRIMARY` of table

`test`.`parent` trx id 65838 lock_mode X locks rec but not gap waiting

Record lock, heap no 3 PHYSICAL RECORD: n_fields 4; compact format; info bits 0

*** WE ROLL BACK TRANSACTION (1)

數(shù)據(jù)庫避免死鎖

  • 合理的設計索引,區(qū)分度高的列放到組合索引前面游盲,使業(yè)務 SQL 盡可能通過索引定位更少的行误墓,減少鎖競爭。
  • 調整業(yè)務邏輯 SQL 執(zhí)行順序益缎, 避免 update/delete 長時間持有鎖的 SQL 在事務前面谜慌。
  • 避免大事務,盡量將大事務拆成多個小事務來處理莺奔,小事務發(fā)生鎖沖突的幾率也更小欣范。
  • 以固定的順序訪問表和行。比如兩個更新數(shù)據(jù)的事務令哟,事務 A 更新數(shù)據(jù)的順序為 1恼琼,2;事務 B 更新數(shù)據(jù)的順序為 2,1屏富。這樣更可能會造成死鎖晴竞。
  • 在并發(fā)比較高的系統(tǒng)中,不要顯式加鎖狠半,特別是是在事務里顯式加鎖噩死。如 select … for update 語句,如果是在事務里(運行了 start transaction 或設置了autocommit 等于0),那么就會鎖定所查找到的記錄神年。
  • 盡量按主鍵/索引去查找記錄已维,范圍查找增加了鎖沖突的可能性,也不要利用數(shù)據(jù)庫做一些額外額度計算工作已日。比如有的程序會用到 “select … where … order by rand();”這樣的語句衣摩,由于類似這樣的語句用不到索引,因此將導致整個表的數(shù)據(jù)都被鎖住捂敌。
  • 優(yōu)化 SQL 和表設計艾扮,減少同時占用太多資源的情況。比如說占婉,減少連接的表泡嘴,將復雜 SQL 分解為多個簡單的 SQL。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末逆济,一起剝皮案震驚了整個濱河市酌予,隨后出現(xiàn)的幾起案子磺箕,更是在濱河造成了極大的恐慌,老刑警劉巖抛虫,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件松靡,死亡現(xiàn)場離奇詭異,居然都是意外死亡建椰,警方通過查閱死者的電腦和手機雕欺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棉姐,“玉大人屠列,你說我怎么就攤上這事∩【兀” “怎么了笛洛?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乃坤。 經常有香客問我苛让,道長,這世上最難降的妖魔是什么湿诊? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任蝌诡,我火速辦了婚禮,結果婚禮上枫吧,老公的妹妹穿的比我還像新娘。我一直安慰自己宇色,他們只是感情好九杂,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宣蠕,像睡著了一般例隆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抢蚀,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天镀层,我揣著相機與錄音,去河邊找鬼皿曲。 笑死唱逢,一個胖子當著我的面吹牛,可吹牛的內容都是我干的屋休。 我是一名探鬼主播坞古,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼劫樟!你這毒婦竟也來了痪枫?” 一聲冷哼從身側響起织堂,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奶陈,沒想到半個月后易阳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡吃粒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年潦俺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片声搁。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡黑竞,死狀恐怖,靈堂內的尸體忽然破棺而出疏旨,到底是詐尸還是另有隱情很魂,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布檐涝,位于F島的核電站遏匆,受9級特大地震影響,放射性物質發(fā)生泄漏谁榜。R本人自食惡果不足惜幅聘,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窃植。 院中可真熱鬧帝蒿,春花似錦、人聲如沸巷怜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽延塑。三九已至绣张,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間关带,已是汗流浹背侥涵。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宋雏,地道東北人芜飘。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像磨总,于是被迫代替她去往敵國和親燃箭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容