1. 程式人生 > 其它 >資料庫鎖表排查

資料庫鎖表排查

問題
客戶反饋後臺系統資訊新增很卡,然後新增失敗,無法新增
檢視服務日誌,發現mysql報錯鎖表
程式和資料庫近期沒有改動,所以首先鎖定日誌排查,確認鎖的表和具體原因
解決
根據tomcat輸出的日誌,確認為mysql報錯丟擲的問題
根據列印的堆疊,找到對應程式碼,發現報錯處是一個刪除方法
查詢鎖表的SQL執行緒,是刪除語句,刪除時耗時較長卡主了
# 查詢現有事務,看哪些程序在等待
select * from information_schema.innodb_trx;
# 緊急處理,可以先刪除現有事務程序
SELECT CONCAT('kill ',trx_mysql_thread_id,';') FROM INFORMATION_SCHEMA.INNODB_TRX;
1
2
3
4


檢視業務後,發現是資訊更新時需要刪除一些關聯表資訊,主表200萬左右資料,關聯表是主表的3倍左右,700多萬,沒有加索引,查詢刪除時較慢
由於一直有客戶操作,無法新增索引,只能把tomcat服務停掉
tomcat服務停掉後,對關聯表的刪除查詢所需欄位public_content_id加了索引,恢復正常
後續
後面又遇到一次,資訊刪除時報錯,查看了下,發現數據量不是特別大,其他業務資料庫查詢也很正常
追蹤了錯誤日誌,也是Lock wait timeout,但是把sql單獨執行,發現很快
判斷應該是其他業務請求返回很慢,一直掛起等待返回,導致同一個執行緒的刪除服務的SQL執行超時,回滾
查看了具體的業務,刪除mysql資訊時,需要同步刪除elasticsearch的索引資訊。刪除索引出錯,設定的超時時間又很長,比mysql執行超時時間還長,進而一直未報elasticsearch的超時錯誤而報了mysql的超時錯誤
對elasticsearch刪除問題進行了處理,並將索引操作另起執行緒,放入執行緒池執行,問題解決

————————————————
版權宣告:本文為CSDN博主「堅持是一種態度」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/u010882234/article/details/116564545