如何處理死鎖:
死鎖已經發生了,怎麼解決:
鎖等待超時自動回滾事務: 直觀方法是在兩個事務相互等待時,當乙個等待時間超過設定的某一閥值時,對其中乙個事務進行回滾,另乙個事務就能繼續執行。這種方法簡單有效,在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,...