查詢Linux下導致MySQL查詢被鎖住的程序資訊
阿新 • • 發佈:2019-02-20
1. 問題描述
在資料庫的使用過程中可能遇到鎖表的情況,導致其他程序訪問同樣的表時出現超時的情況。具體表現為,在MySQL中使用如下命令
SHOW PROCESSLIST
顯示結果為
其中,Status列表示語句的查詢狀態,若值為Locked,則表示該查詢被其他查詢鎖住了。Host表示發出查詢語句的主機資訊,如圖所示,被鎖住的查詢在192.168.1.152主機的38292埠發出的TCP連線上。Info列中給出了被鎖住的語句的資訊。
怎麼根據這些資訊找出被鎖住的SQL語句所在程序的相關資訊,從而為DEBUG提供幫助呢?
2. 解決方法
a. 根據TCP埠號,檢視程序PID
方法一:lsoflsof -Pnl +M -i4 | grep 38292
方法二:netstat
netstat -anp | grep 38292
在192.168.1.152主機上執行上述語句,如下圖所示,兩種方法得到的38292埠對應的程序PID均為11882
b. 根據PID,檢視程序資訊
在192.168.1.152主機上執行以下命令,檢視程序資訊ps aux | grep 11882
如下圖所示,可以檢視程序啟動的命令等基本資訊
根據以上資訊,可以對MySQL查詢的鎖表問題進行排查,為進一步除錯程式提供需要的資訊。