1. 程式人生 > >查詢Linux下導致MySQL查詢被鎖住的程序資訊

查詢Linux下導致MySQL查詢被鎖住的程序資訊

1. 問題描述

在資料庫的使用過程中可能遇到鎖表的情況,導致其他程序訪問同樣的表時出現超時的情況。具體表現為,在MySQL中使用如下命令

SHOW PROCESSLIST
顯示結果為


其中,Status列表示語句的查詢狀態,若值為Locked,則表示該查詢被其他查詢鎖住了。Host表示發出查詢語句的主機資訊,如圖所示,被鎖住的查詢在192.168.1.152主機的38292埠發出的TCP連線上。Info列中給出了被鎖住的語句的資訊。

怎麼根據這些資訊找出被鎖住的SQL語句所在程序的相關資訊,從而為DEBUG提供幫助呢?

2. 解決方法

a. 根據TCP埠號,檢視程序PID

方法一:lsof
lsof -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查詢的鎖表問題進行排查,為進一步除錯程式提供需要的資訊。