這篇文章主要介紹了mysql 資料庫innodb死鎖原因及解決辦法,需要的朋友可以參考下:
在一些涉及到數量扣減的業務場景中為了保持資料的一致性, 通常需要把一些不同資源(行或表)的插入或修改放在乙個事務中提交給資料庫, 這樣在多併發情況下很容易造成死鎖。
這裡以訂單和明細舉例:
比如訂單和多個訂單明細對應不同的貨物, 不同的訂單會包含相同的貨物, 這個大家容易理解吧,不同的人當然可以買同樣的東西了。
下單環境是多併發這個應該沒有異議了, 那這個時候存在併發 + 相同資源的爭奪,產生死鎖的高危環境。
這個時候資料庫會檢測到死鎖同時kill其中乙個執行緒, 通常是複雜度低資源少的執行緒。
如何預防避免當前場景下的死鎖:
1. 提高執行緒的效能, 加快執行速度及時釋放出資源。
死鎖的產生和預防死鎖
1,死鎖的定義 死鎖是指多個進 程因競爭資源而造成的一種僵局 互相等待 若無外力作用,這些程序都將無法向前推進。2,死鎖產生的原因主要是 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資源分配不當等。3,死鎖產生的必要條件 1 互斥條件 乙個資源每次只能被乙個程序使用。2 請求與保持條件 ...
死鎖 死鎖的預防和避免
死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。由死鎖的定義可知,死鎖主要是由於競爭資源引起的,那麼這裡的資源指的是哪些資源呢?系統中的資源...
死鎖及其解決方案(避免 預防 檢測)
所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖 死鎖產生的原因?1.因競爭資源發生死鎖 現象 系統中供多個程序共享的資源的數目不足以滿足全部程序的需要時,就會引起對諸資源的競爭而發生死鎖現象 2.程序推進順...