1. 程式人生 > >並發請求 + 事務嵌套 + 更新數據 = 死鎖

並發請求 + 事務嵌套 + 更新數據 = 死鎖

工作 問題 ... 分享圖片 導致 support info 執行 配置文件

今有幸為同事排查死鎖問題。

問題描述:一個get接口,內依據參數執行select ... for update,未考慮並發場景,導致程序死鎖,且只要並發請求該接口,幾乎百發百中。

問題定位

  1.檢測數據庫死鎖情況,結果無。

  2.接口內無相關共享資源,不會死鎖

  3.由於從事許久事務方面工作,所以想到了事務傳播機制,果不出所料,其配置文件中get*接口配置的傳播機制是SUPPORTS,故判斷應該是事務嵌套死鎖。

問題解釋:A請求開啟新事物執行update,此時來了B請求update,由於是SUPPORTS,所以加入A事務,A事務中語句執行完畢但事務需等待B完成後才能提交,而B中語句需等待A中提交後才能執行,所以出現了並發請求 +

事務嵌套 + 數據庫更新導致死鎖問題。

可參考下圖:

技術分享圖片

並發請求 + 事務嵌套 + 更新數據 = 死鎖