成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個 MySQL 數據庫死鎖的案例和解決方案

數據庫 MySQL
按照消除死鎖條件的思路,一般會想到將兩個線程里的加鎖順序改為一致,但是此場景并不完全適用。

本文介紹了一個 MySQL 數據庫死鎖的案例和解決方案。

場景

生產環境出了一個偶現的數據庫死鎖問題,導致少部分業務處理失敗。

分析特征之后,發現是多個線程并發執行同一個方法,更新關聯的數據時可能會出現,把場景簡化概括一下:

  • 有一個數據表 tb1,主鍵名 id,有兩條 id 分別為 A1 和 A2 的記錄,對應的外鍵 fk_biz_no 相同;
  • 方法 myFunc,整體是一個事務;
  • 方法 myFunc 里的邏輯是先更新 tb1 里的一條記錄,執行一些邏輯后,再更新該記錄的外鍵對應的所有記錄;

這樣 線程1 和 線程2 并發執行 myFunc 方法時,示意如下:

線程1 先更新 A1,此時會對 A1 所在行加寫鎖,再更新 A1 和 A2,此時會同時給 A1 和 A2 所在行都加上寫鎖;

線程2 先更新 A2,此時會對 A2 所在行加寫鎖,再更新 A1 和 A2,此時會同時給 A1 和 A2 所在行都加上寫鎖。

如此一來,如果出現類似以下的執行時序,則會形成死鎖:

帶著一點偽裝的 ABBA 死鎖。

解決方案

按照消除死鎖條件的思路,一般會想到將兩個線程里的加鎖順序改為一致,但是此場景并不完全適用。以下是幾種可行的方案:

  • 方案一、對 myFunc 方法加分布式鎖,可以用需要更新的記錄的 fk_biz_no 作為鎖的 key,這樣同一個 fk_biz_no 的更新操作就會串行執行;
  • 方案二、在方法/事務的最開始,就提前把 A1A2 的寫鎖申請到(比如 SELECT ... FOR UPDATE),然后再執行后續邏輯;
  • 方案三、優化 myFunc 方法里的邏輯,先將 A1 和 A2 的數據都處理好了,然后一次性更新 A1A2,即將方法里的兩次更新合并成一次更新;

方案一 和 方案二 效果類似,都是使同一 fk_biz_no 的更新操作串行了;而方法三則是消除了 ABBA 的情況(實際場景中有可能需要考慮并發執行下的數據混亂、數據覆蓋的問題,那是另外的話題了,在此不展開)。

小結

來一起復習下死鎖的四個必要條件:

  • 互斥條件:一個資源每次只能被一個進程使用;
  • 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放;
  • 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪;
  • 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。

預防和消除死鎖的思路,則無非是消除上述四個條件中的一個或多個。

責任編輯:趙寧寧 來源: 悶騷的程序員
相關推薦

2011-08-05 13:41:18

mysql數據庫數據庫配置

2011-03-07 16:42:05

MySQL數據庫安全

2020-03-11 09:57:10

數據安全網絡安全網絡攻擊

2011-03-28 13:11:18

MySQL數據庫安全

2010-05-27 18:24:09

MySQL數據庫密碼

2024-11-12 15:42:06

2011-07-25 09:32:28

2010-05-28 11:22:07

2011-08-04 18:55:53

SQL Server 用戶sa登錄失敗

2009-11-18 16:10:00

2011-07-18 09:36:42

Mysql數據庫root@localh

2011-03-03 18:09:14

2018-03-26 12:58:52

數據庫OracleMySQL

2022-03-31 10:25:20

物聯網工業 4.0大數據分析

2010-06-04 19:06:47

連接MySQL數據庫

2011-01-21 09:43:10

安恒數據庫安全安全審計

2011-03-24 15:41:42

數據庫

2023-10-16 16:08:42

工業 4.0物聯網邊緣計算

2017-12-27 13:07:52

數據庫MySQL主從復制

2011-08-03 14:02:02

數據庫連接ACCESS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: a久久 | 中文字幕免费在线 | 免费看一区二区三区 | 日韩精品久久一区二区三区 | 欧洲国产精品视频 | 国产精品99久久久久久动医院 | 国产美女在线看 | 亚洲一区二区免费 | 久久精品在线播放 | 日韩在线视频一区二区三区 | 日韩av一区二区在线观看 | 久久精品欧美一区二区三区不卡 | 欧美精 | 日本午夜免费福利视频 | 国产高清在线观看 | 极品一区| 狠狠色综合欧美激情 | 精品国产乱码久久久久久闺蜜 | 精品国产青草久久久久福利 | 亚洲天堂精品久久 | 成人在线观看免费爱爱 | 欧洲精品在线观看 | h漫在线观看 | 亚洲一区二区在线播放 | 免费看一区二区三区 | 日本羞羞影院 | 国产精品久久久久久吹潮 | 国产欧美精品一区二区 | 91在线视频播放 | 国产精品1区2区 | 日韩三级视频 | 欧美高清性xxxxhd | 国产高清视频在线观看 | 国产视频中文字幕 | 精品久久香蕉国产线看观看亚洲 | 国产成人免费在线观看 | 中文字幕亚洲一区二区va在线 | 中文字幕一区二区三区乱码图片 | 一区二区三区久久 | 国产区一区 | 国产激情免费视频 |