mysql查詢因爲索引導致表阻塞或死鎖

今天在生產上對錶進行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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章