mysql死鎖

1.死鎖發生的條件
互斥條件:一個資源每次只能被一個進程使用;
請求與保持條件:一個進程因請求資源而阻塞時,對已得到的資源保持不放;
不剝奪條件:進程已得到的資源,在末使用完以前,不能強行剝奪;
循環等待條件:若干進程之間造成一種頭尾相接的循環等待資源關係。數據庫

2.緣由session

死鎖的關鍵在於:兩個(或以上)的Session加鎖的順序不一致。
那麼對應的解決死鎖問題的關鍵就是:讓不一樣的session加鎖有次序併發

3.結果性能

發生死鎖後,InnoDB通常都能自動檢測到,並使一個事務釋放鎖並回退,另外一個事務得到鎖,繼續完成事務。但在涉及外部鎖,或涉及表鎖的狀況下,InnoDB並不能徹底自動檢測到死鎖,這須要經過設置鎖等待超時參數 innodb_lock_wait_timeout來解決。須要說明的是,這個參數並非只用來解決死鎖問題,在併發訪問比較高的狀況下,若是大量事務因沒法當即得到所需的鎖而掛起,會佔用大量計算機資源,形成嚴重性能問題,甚至拖跨數據庫。咱們經過設置合適的鎖等待超時閾值,能夠避免這種狀況發生。進程

相關文章
相關標籤/搜索