今天在生產上對錶進行select查詢,導致阻塞死鎖,解決思路
執行
show PROCESSLIST;
或者以下sql
select * from information_schema.processlist;
上述指令是用來查看那些線程正在運行,你也可以得到這些信息,從INFORMATION_SCHEMA PROCESSLIST這個表,或者通過mysqladmin processlist指令。如果你有PROCESS權限,你可以查看所有的線程。否則,你只能查看你自己當前賬戶的線程。如果你沒有使用FULL關鍵字,你只能查看每個記錄中Info字段裏面的前100個字符。(轉載自別人說明)
我們線上的問題是執行select操作時,創建索引所以導致死鎖,還有select太複雜查詢時間過長導致阻塞
通過SHOW PROCESSLIST指令,發現有好多線程Command處於LOCK狀態。最長的Time字段顯示達到33772seconds,導致系統應用卡頓情況嚴重,
爲了解決問題,在mysql立即調用KILL指令,殺掉進程
說明:connection選項,kill的時候,將連接也斷掉,而query選項,kill的過程只是將該指令殺掉,連接還保持。 kill指令不指定connection或者query選項時,默認是connection。
這只是解決系統卡頓問題,源頭還是sql本身問題,複雜度高,所查詢的字段基本沒走索引,最後是通過把sql拆分,並且把邏輯轉移到程序層面,而不是在數據庫操作,並且把查詢頻率高的字段添加索引,
參考(https://www.cnblogs.com/shihuc/p/8733460.html)