mysql 死鎖 解決辦法和避免出現死鎖

2021-08-21 04:33:22 字數 575 閱讀 5784

如何處理死鎖:

死鎖已經發生了,怎麼解決:

鎖等待超時自動回滾事務:  直觀方法是在兩個事務相互等待時,當乙個等待時間超過設定的某一閥值時,對其中乙個事務進行回滾,另乙個事務就能繼續執行。這種方法簡單有效,在innodb中,引數innodb_lock_wait_timeout用來設定超時時間。

演算法主動進行死鎖檢測:  innodb還提供了wait-for graph演算法來主動進行死鎖檢測,每當加鎖請求無法立即滿足需要並進入等待時,wait-for graph演算法都會被觸發。

如何盡可能避免死鎖:

1)以固定的順序訪問表和行。比如兩個更新資料的事務,事務a 更新資料的順序 為1,2;事務b更新資料的順序為2,1。這樣更可能會造成死鎖。

2)大事務拆小。大事務更傾向於死鎖,如果業務允許,將大事務拆小。

3)在同乙個事務中,盡可能做到一次鎖定所需要的所有資源,減少死鎖概率。

4)降低隔離級別。如果業務允許,將隔離級別調低也是較好的選擇,比如將隔離級別從rr調整為rc,可以避免掉很多因為gap鎖造成的死鎖。

5)為表新增合理的索引。可以看到如果不走索引將會為表的每一行記錄新增上鎖,死鎖的概率大大增大。

Mysql死鎖臨時解決辦法

1.檢視下在鎖的事務 select from information schema.innodb trx 2.殺死程序id 就是上面命令的trx mysql thread id列 kill 執行緒id 其它關於檢視死鎖的命令 1 檢視當前的事務 select from information sch...

死鎖的解決辦法

什麼是死鎖 在多個執行緒共享資源的時候,如果兩個執行緒分別占有一部分資源,並且同時等待對方的資源,就會成死鎖現象。如果鎖之間相互巢狀,就有可能出現死鎖。因此盡量不要出現鎖之間的巢狀。解決辦法 1.儘量減少資源占用時間,可以有效降低死鎖發生概率。2.銀行家演算法。銀行家演算法 我們可以把作業系統看作是...

Oracle pl sql 死鎖解決辦法

查詢當前資料庫鎖的sql select a.session id,c.serial a.locked mode,b.object id b.object name b.object type,c.logon time,a.oracle username,a.os user name,b.owner,...