資料庫死鎖和慢日誌問題導致服務不可用的排查過程

2022-04-21 22:47:24 字數 1052 閱讀 9715

資料庫執行更新失敗,檢視日誌

首先是根據報的exception進行排查:

org.hibernate.exception.lockacquisitionexception: could not execute statement

很明顯,是資料庫死鎖,導致不能執行我的更新sql。

檢視程序

--

查詢是否鎖表

show open tables where in_use >0;

--查詢當前使用者程序

show processlist;

--查詢當前的事務

select

*from

information_schema.innodb_trx;

--檢視當前鎖定的事務

select

*from

information_schema.innodb_locks;

--檢視當前等鎖的事務

select

*from information_schema.innodb_lock_waits;

查詢出占用當前鎖的程序id,kill掉即可。

kill

1234;

通過上面方式未查找到死鎖的程序,為排除其他程序影響,我將連線該資料庫的程序都kill掉,之後重啟服務進行重新連線,問題依然存在。

資料庫死鎖產生的原因有:

通過上面排查基本排除掉是業務**產生死鎖,接下來排查系統資源,通過排查,發現果然是系統資源的原因導致。慢日誌占用空間過大,導致資料庫所在伺服器不能再進行寫入,所以報ioexception。排查問題時也應該先從io異常開始的。

接下來就是分析慢日誌,確定是業務**原因還是慢日誌配置的原因(執行時間設定等),分析完之後刪掉騰出空間。

資料庫死鎖問題

資料庫是乙個多使用者使用的共享資源,當多個使用者併發地訪問資料時,在資料庫中就會產生多個事務同時訪問同一資料的情況。若對併發操作不加控制就可能會讀取和儲存不正確的資料,破壞資料庫的一致性。加鎖是實現資料庫併發控制的乙個非常重要的技術。在實際應用中經常會遇到的與鎖相關的異常情況,當兩個事務需要一組有衝...

Sybase 資料庫死鎖問題

死鎖的發生對系統的效能和吞吐量都有重要影響,經檢測發現,管理資訊系統的死鎖主要是因為兩個或多個執行緒 登入 搶占同一表資料資源。引起長時間搶占同一資源不是因為我們需要處理的事務太複雜,時間太長,而往往是因為我們在前端應用程式對資料庫作操作時忘了提交。本文介紹一種處理解決這種死鎖的方法。sybase封...

mysql資料庫開啟慢查詢日誌

修改配置檔案 在配置檔案my.ini中加上下面兩句話 1 log slow queries c xampp mysql slow query.log 2 long query time 3 第一句使用來定義慢查詢日誌的路徑 若是linux系統,會涉及許可權問題 第二句使用來定義用時超過過多少秒的查詢...