死鎖的分析與解決

死鎖

兩個或者兩個以上的事務(wù)在執(zhí)行過程中,因爭奪鎖資源而造成的一種互相等待的現(xiàn)象伺绽。

死鎖產(chǎn)生的必要條件

互斥

  • 并發(fā)執(zhí)行的事務(wù)為了進行必要的隔離保證執(zhí)行正確养泡,在事務(wù)結(jié)束前,需要對修改的數(shù)據(jù)庫記錄持鎖奈应,保證多個事務(wù)對相同數(shù)據(jù)庫記錄串行修改澜掩。

串行修改:a 事務(wù)尚未提交,b 事務(wù)不能修改同個數(shù)據(jù)記錄

  • 對于大型并發(fā)系統(tǒng)無法避免

請求與保持

  • 已經(jīng)持有一個鎖資源杖挣,等待另外一個鎖資源
  • 死鎖僅發(fā)生在請求兩個或兩個以上的鎖對象
  • 由于應(yīng)用需要肩榕,難以消除

不剝奪

  • 已經(jīng)獲得鎖資源的事務(wù),在未執(zhí)行前惩妇,不能被強制剝奪株汉,只能使用完時,由事務(wù)自己釋放歌殃。
  • 一般用于已經(jīng)出現(xiàn)死鎖時乔妈,通過破壞該條件達到解除死鎖的目的。
  • 數(shù)據(jù)庫系統(tǒng)通常通過一定的死鎖檢測機制發(fā)現(xiàn)死鎖挺份,強制回滾代價相對較小的事務(wù)褒翰,達到解除死鎖的目的。

環(huán)路等待

  • 發(fā)生死鎖時匀泊,必然存在一個事務(wù)---鎖的環(huán)形鏈
  • 按照同一順序獲取鎖,可以破壞該條件
  • 通過分析死鎖事務(wù)之間的鎖競爭關(guān)系朵你,調(diào)整 SQL 的順序各聘,達到消除死鎖的目的。

MySQL 中的鎖

排他鎖

與其他任何鎖都是沖突的抡医。

共享鎖

多個事務(wù)可以共享一把鎖躲因。

加鎖方式

外部加鎖

由應(yīng)用程序執(zhí)行特定語句早敬,顯式的加鎖;

  • 可以通過分析 sql 語句大脉,比較容易看清鎖的依賴關(guān)系
  • 共享鎖 select * from table lock in share mode
  • 排他鎖 select * from table for update

內(nèi)部加鎖

為了實現(xiàn) ACID 特性搞监,由數(shù)據(jù)庫內(nèi)部自動添加

  • 加鎖規(guī)則繁瑣,與 SQL 執(zhí)行計劃镰矿、事務(wù)隔離級別琐驴、表索引結(jié)果有關(guān),不容易排查死鎖情況

哪些 SQL 需要持有鎖

  • 快照讀

    • 所有 select 語句都屬于快照讀
    • Innodb 實現(xiàn)了多版本控制(MVCC)秤标,支持不加鎖的快照度 「保證 select 語句的性能」
    • 能夠保證同一個 select 結(jié)果集一致
    • 不能保證同一個事務(wù)內(nèi)部绝淡,select 語句和其他語句的數(shù)據(jù)一致性,如有業(yè)務(wù)需要苍姜,需外部顯式加鎖
  • 當前讀

    • select * from table lock in share mode
    • select * from table for update
    • Update from table set ...
    • Insert into ...
    • Delete from table ...

    顯式加鎖的讀牢酵,以及更新插入刪除操作語句,都是可觸發(fā) MySQL 內(nèi)部加鎖的

捕獲死鎖的 sql 語句

sql 語句:

show engine innodb status
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末衙猪,一起剝皮案震驚了整個濱河市馍乙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌垫释,老刑警劉巖潘拨,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饶号,居然都是意外死亡铁追,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門茫船,熙熙樓的掌柜王于貴愁眉苦臉地迎上來琅束,“玉大人,你說我怎么就攤上這事算谈∩鳎” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵然眼,是天一觀的道長艾船。 經(jīng)常有香客問我,道長高每,這世上最難降的妖魔是什么屿岂? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任难裆,我火速辦了婚禮诗充,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匀伏。我一直安慰自己带欢,他們只是感情好运授,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布烤惊。 她就那樣靜靜地躺著,像睡著了一般吁朦。 火紅的嫁衣襯著肌膚如雪柒室。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天逗宜,我揣著相機與錄音雄右,去河邊找鬼。 笑死锦溪,一個胖子當著我的面吹牛不脯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刻诊,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼防楷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了则涯?” 一聲冷哼從身側(cè)響起复局,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粟判,沒想到半個月后亿昏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡档礁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年角钩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呻澜。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡递礼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出羹幸,到底是詐尸還是另有隱情脊髓,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布栅受,位于F島的核電站将硝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏屏镊。R本人自食惡果不足惜依疼,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闸衫。 院中可真熱鬧涛贯,春花似錦、人聲如沸蔚出。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骄酗。三九已至稀余,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間趋翻,已是汗流浹背睛琳。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踏烙,地道東北人师骗。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像讨惩,于是被迫代替她去往敵國和親辟癌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • 我們都知道事務(wù)的幾種性質(zhì)荐捻,數(shù)據(jù)庫為了維護這些性質(zhì)黍少,尤其是一致性和隔離性,一般使用加鎖這種方式处面。同時數(shù)據(jù)庫又是個高并...
    CodeKing2017閱讀 625評論 0 7
  • MYSQL 基礎(chǔ)知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 7,820評論 5 116
  • MySQL 加鎖處理分析 轉(zhuǎn)載2013年12月13日 16:43:55 7598 原文地址:http://hede...
    初來的雨天閱讀 453評論 0 2
  • 我們總被告知 相信一切 平靜而美好 什么都是最好的安排 昨夜是怎樣悲愴的夢 讓我們離別 太陽不知道啊 它依舊升起 ...
    舒航2018閱讀 103評論 0 1
  • ?前提是用react-native init 工程名 已經(jīng)初始化好一個可以正常運行的RN工程(檢驗標準是在手機上可...
    姑蘇風閱讀 5,267評論 2 3