資料庫查詢死鎖
A. 一個資料庫死鎖竟然被測試發現了,這你敢信
在測試生產監控時,出人意料地發現了資料庫死鎖的報錯:org.springframework..: 更新資料庫時出現死鎖,具體原因為com.mysql.cj.jdbc.exceptions.: 發現死鎖。這個意外的發現源於一次測試討論。
事情是這樣的:老劉對理賠系統上線後的生產驗證問題感到困惑,詢問如何在測試階段預防生產問題。我回應說,目前的生產驗證依賴於業務人員,但測試團隊決定調查可能的解決方案。在深入研究後,我偶然間遇到了EasyBI工具,這成為了解決問題的關鍵。
EasyBI是一個強大的生產數據統計工具,它支持連接生產資料庫或通過介面開發,提供聚合表、透視表等圖形化配置。我通過開發生產數據異常、理賠數量統計等介面,將其接入EasyBI,並配置成郵件訂閱和定時任務,實時監控生產數據。其中,我特別關注的是錯誤信息統計介面,它能幫助識別錯誤類型,判斷業務邏輯的合理性。
在開發過程中,我遇到的挑戰是查詢資料庫時介面超時。為解決這個問題,我調整策略,將數據預先存儲並進行校驗,避免了頻繁查詢第三方介面。正是在錯誤信息統計時,我發現了資料庫死鎖的異常,顯示了org.springframework..錯誤。與老劉分享後,他給出了贊賞。
這個經歷提醒我們,通過有效的工具和持續的監控,即使是最微小的問題也能被及時發現,從而確保生產環境的穩定性和效率。我會繼續努力,提升測試監控水平。
B. 如何查看MySQL資料庫的死鎖信息
查看MySQL資料庫的死鎖日誌
1. 使用終端或命令提示符登錄到MySQL,輸入命令:mysql -h xxxx.xxx.xxx -P 3306 -u username -p解釋:xxxx.xxx.xxx是資料庫IP地址,username是資料庫用戶名,輸入命令後,會讓你輸入username對應的密碼,就可以登錄了
4. 如何分析日誌,定位死鎖原因看3裡面的圖,紫色劃線部分分析:事務1,等待RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`,這個位置的X鎖事務2,持有RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`這個地方的S鎖事務2,等待這個地方的X鎖理論上這個事務2是可以提交的不會,死鎖,但是這個事務日誌只列印最後一部分死鎖,信息,這裡面隱含的條件是,事務1也持有RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`這個地方的S鎖,這樣,事務2不能加X鎖,同時事務1也不能加X鎖,產生死鎖。