MySQL 數(shù)據(jù)庫死鎖的分析與解決

發(fā)生的原因

  • 例子


    例子

mysql 加上行鎖


行鎖導致的死鎖
什么是死鎖

死鎖是指兩個或者兩個以上的事務在執(zhí)行過程中常侦,因爭奪資源而造成的一種互相等待的現(xiàn)象紊册。

死鎖產(chǎn)生的必要條件
  1. 互斥
    • 并發(fā)執(zhí)行的事務為了進行必要的隔離保證執(zhí)行正確辆亏,在事務結束前衡蚂,需要對修改的數(shù)據(jù)庫記錄持鎖评雌,保證多個事務對相同數(shù)據(jù)庫記錄串行修改氯质。
    • 對于大型并發(fā)系統(tǒng)無法避免。
  2. 請求與保持
    • 已經(jīng)持有一個資源鎖档址,等待另外一個資源鎖
    • 死鎖僅發(fā)生在請求兩個或者兩個以上的鎖對象的時候
    • 由于應用的需要盹兢,難以消除
  3. 不剝奪
    • 已經(jīng)獲得鎖資源的事務,在未執(zhí)行前守伸,不能被強行剝奪绎秒,只能在使用完成后,由事務自己釋放含友。
    • 一般用于已經(jīng)出現(xiàn)死鎖時替裆,通過破壞該條件達到解除死鎖的目的校辩。
    • 數(shù)據(jù)庫系統(tǒng)通常通過一定的死鎖檢測機制發(fā)現(xiàn)死鎖窘问,強制回滾代價相對較小的事務,達到解除死鎖的目的宜咒。
  4. 環(huán)路等待
    環(huán)路等待
    • 發(fā)生死鎖時惠赫,必然存在一個事務 —— 鎖的環(huán)形鏈。
    • 按照同一順序獲取鎖故黑,可以破壞該條件儿咱。
    • 通過分析死鎖事物之間的鎖競爭關系庭砍,調(diào)整SQL的順序,達到消除死鎖的目的混埠。
MySQL中的鎖
  • X 排他鎖 與任何其他的鎖都是沖突的怠缸,其他的鎖需要等待
  • S 共享鎖 與共享鎖可以兼容,如果有其他需要加共享鎖是可以進行的
已有鎖 \ 欲加鎖 X (排它鎖) S (共享鎖)
X(排它鎖) 沖突 沖突
S(共享鎖) 沖突 兼容
  • 加鎖的方式:
    • 外部加鎖:
      • 由應用程序添加钳宪,鎖依賴關系較容易分析
      • 共享鎖(S): select * from table lock in share mode
      • 排它鎖(X): select * from table for update
    • 內(nèi)部加鎖:
      • 為了實現(xiàn)ACID特性揭北,由數(shù)據(jù)庫系統(tǒng)內(nèi)部自動添加
      • 加鎖規(guī)則繁瑣,與SQL執(zhí)行計劃吏颖、事務隔離級別搔体、表索引結構有關
      • 共享鎖(S)和排它鎖(X)
哪些SQL需要持有鎖
  • 快照讀:
    • Innodb 實現(xiàn)了多版本控制(MVCC),支持不加鎖快照讀
    • Select * from table where ……
    • 能夠保證同一個Select結果集是一致的
    • 不能保證同一個事務內(nèi)部半醉,Select語句和其他語句的數(shù)據(jù)一致性疚俱,如果業(yè)務需要,需要通過外部顯示加鎖缩多。
  • 當前讀:
    • select * from table lock in share mode
    • select * from table for update
    • update from table set ……
    • insert into ……
    • delete from table ……
分析死鎖的常用辦法
  • show engine innodb status


    分析死鎖
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呆奕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子衬吆,更是在濱河造成了極大的恐慌登馒,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咆槽,死亡現(xiàn)場離奇詭異陈轿,居然都是意外死亡,警方通過查閱死者的電腦和手機秦忿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門麦射,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灯谣,你說我怎么就攤上這事潜秋。” “怎么了胎许?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵峻呛,是天一觀的道長。 經(jīng)常有香客問我辜窑,道長钩述,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任穆碎,我火速辦了婚禮牙勘,結果婚禮上,老公的妹妹穿的比我還像新娘所禀。我一直安慰自己方面,他們只是感情好放钦,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著恭金,像睡著了一般操禀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上横腿,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天床蜘,我揣著相機與錄音,去河邊找鬼蔑水。 笑死邢锯,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的搀别。 我是一名探鬼主播丹擎,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼歇父!你這毒婦竟也來了蒂培?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤榜苫,失蹤者是張志新(化名)和其女友劉穎护戳,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垂睬,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡媳荒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了驹饺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钳枕。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赏壹,靈堂內(nèi)的尸體忽然破棺而出鱼炒,到底是詐尸還是另有隱情,我是刑警寧澤蝌借,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布昔瞧,位于F島的核電站,受9級特大地震影響菩佑,放射性物質(zhì)發(fā)生泄漏自晰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一擎鸠、第九天 我趴在偏房一處隱蔽的房頂上張望缀磕。 院中可真熱鬧,春花似錦劣光、人聲如沸袜蚕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牲剃。三九已至,卻和暖如春雄可,著一層夾襖步出監(jiān)牢的瞬間凿傅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工数苫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留聪舒,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓虐急,卻偏偏與公主長得像箱残,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子止吁,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

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