mysql解決死鎖的三種方法 mysql數據庫死鎖解決方法


mysql解決死鎖的三種方法 mysql數據庫死鎖解決方法

文章插圖
mysql數據庫死鎖解決方法如下:
1、對于按鈕等控件,點擊后使其立刻失效,不讓用戶重復點擊,避免對同時對同一條記錄操作 。
2、使用樂觀鎖進行控制 。樂觀鎖大多是基于數據版本(Version)記錄機制實現 。即為數據增加一個版本標識,在基于數據庫表的版本解決方案中,一般是 通過為數據庫表增加一個“version”字段來實現 。讀取出數據時,將此版本號一同讀出,之后更新時,對此版本號加一 。此時,將提交數據的版本數據與數 據庫表對應記錄的當前版本信息進行比對,如果提交的數據版本號大于數據庫表當前版本號,則予以更新,否則認為是過期數據 。樂觀鎖機制避免了長事務中的數據 庫加鎖開銷(用戶A和用戶B操作過程中,都沒有對數據庫數據加鎖),大大提升了大并發量下的系統整體性能表現 。Hibernate 在其數據訪問引擎中內置了樂觀鎖實現 。需要注意的是,由于樂觀鎖機制是在系統中實現,來自外部系統的用戶更新操作不受系統的控制,因此可能會造 成臟數據被更新到數據庫中 。
【mysql解決死鎖的三種方法 mysql數據庫死鎖解決方法】3、使用悲觀鎖進行控制 。悲觀鎖大多數情況下依靠數據庫的鎖機制實現,以保證操作最大程度的獨占性 。但隨之而來的就是數據庫性能的大量開銷,特別是對長事務而言,這樣的開銷往往無法承受 。如一個金融系統, 當某個操作員讀取用戶的數據,并在讀出的用戶數據的基礎上進行修改時(如更改用戶賬戶余額),如果采用悲觀鎖機制,也就意味著整個操作過程中(從操作員讀 出數據、開始修改直至提交修改結果的全過程,甚至還包括操作員中途去煮咖啡的時間),數據庫記錄始終處于加鎖狀態,可以想見,如果面對成百上千個并發,這 樣的情況將導致災難性的后果 。所以,采用悲觀鎖進行控制時一定要考慮清楚 。