一次資料庫鎖等待超時疑似死鎖排查過程

2021-10-21 14:08:37 字數 993 閱讀 6672

1、起因:

測試妹紙找過來說定時任務日誌裡有超時日誌,我看了下估摸是依賴的服務a在重啟之類的原因,問題不大觀望下過一分鐘應該沒有了

過幾分鐘在看日誌,居然還在不停的報錯,於是就去依賴的服務a看了下日誌

哎呀,居然鎖等待超時,莫不是死鎖了?

2、排查原因:

在mysql控制端執行命令看有沒有開啟死鎖日誌開關,on開了

show variables like 'innodb_print_all_deadlocks';

繼續執行命令show engine innodb status \g;,找到latest detected deadlock對應死鎖明細,看是哪些sql導致了死鎖

檢視後居然沒有找到死鎖資訊,那鎖等待超時原因是什麼?而且再觀察日誌都正常了沒有鎖等待超時,為什麼突然就好了?中途沒有任何重啟動作

3、猜測:

沒有死鎖發生但由鎖等待超時,程式是沒可能的,都設定了超時時間不會十幾分鐘不釋放的。那有沒可能是人為對行記錄加鎖了呢?試探問了下組內的同事們,還真有位同事做過錶記錄更新操作,且更新的記錄就是發生鎖等待超時的記錄。

那鎖等待超時問題就告一段落了。

4、後續補充

有沒辦法明確的定位到行加鎖問題而不是考猜測論證呢?有的

# 檢視當前行鎖明細

select * from information_schema.innodb_trx;

# 根據行鎖明細中的trx_mysql_thread_id查詢程序明細,host為客戶端ip段進口

select * from information_schema.processlist where id=2064080

這樣就知道誰(host區分人為操作、伺服器)對記錄加了鎖辣

記一次資料庫事務鎖

最近在做專案的時候碰到乙個問題,事務鎖。transactionoptions tos new transactionoptions tos.isolationlevel isolationlevel.repeatableread 行鎖 只會鎖住當前操作的那一行資料,當前表的其他資料不受影響。已驗證 ...

資料庫偶然出現死鎖 等待鎖超時 的情況處理

前言 朋友諮詢我說執行簡單的update語句失效,症狀如下 mysql update order info set province id 15 city id 1667 where order from 10 and order out sn 1407261241 x error 1205 hy0...

記一次資料庫的實戰

話不多說 直接開始 開始我們的敲 的工程吧 首先匯入標頭檔案 import tkinter import tkinter.messagebox import pandas as pd import numpy as np import matplotlib.pyplot as plt from sk...