關閉→
當前位置:知科普>IT科技>mysql數據庫死鎖解決方法

mysql數據庫死鎖解決方法

知科普 人氣:1.94W

mysql數據庫死鎖解決方法如下:

mysql數據庫死鎖解決方法

1、對於按鈕等控件,點擊後使其立刻失效,不讓用户重複點擊,避免對同時對同一條記錄操作。

2、使用樂觀鎖進行控制。樂觀鎖大多是基於數據版本(Version)記錄機制實現。即為數據增加一個版本標識,在基於數據庫表的版本解決方案中,一般是 通過為數據庫表增加一個“version”字段來實現。讀取出數據時,將此版本號一同讀出,之後更新時,對此版本號加一。此時,將提交數據的版本數據與數 據庫表對應記錄的當前版本信息進行比對,如果提交的數據版本號大於數據庫表當前版本號,則予以更新,否則認為是過期數據。樂觀鎖機制避免了長事務中的數據 庫加鎖開銷(用户A和用户B操作過程中,都沒有對數據庫數據加鎖),大大提升了大併發量下的系統整體性能表現。Hibernate 在其數據訪問引擎中內置了樂觀鎖實現。需要注意的是,由於樂觀鎖機制是在系統中實現,來自外部系統的用户更新操作不受系統的控制,因此可能會造 成髒數據被更新到數據庫中。

3、使用悲觀鎖進行控制。悲觀鎖大多數情況下依靠數據庫的鎖機制實現,以保證操作最大程度的獨佔性。但隨之而來的就是數據庫性能的大量開銷,特別是對長事務而言,這樣的開銷往往無法承受。如一個金融系統, 當某個操作員讀取用户的數據,並在讀出的用户數據的基礎上進行修改時(如更改用户賬户餘額),如果採用悲觀鎖機制,也就意味着整個操作過程中(從操作員讀 出數據、開始修改直至提交修改結果的全過程,甚至還包括操作員中途去煮咖啡的時間),數據庫記錄始終處於加鎖狀態,可以想見,如果面對成百上千個併發,這 樣的情況將導致災難性的後果。所以,採用悲觀鎖進行控制時一定要考慮清楚。

TAG標籤:#死鎖 #數據庫 #mysql #