作為一個開發人員或者數據庫管理員,學會檢查數據庫運行情況是必不可少的工作。造成MySQL線程卡頓的原因有很多,比如deadlock,但是無論是哪種原因,我們發現問題之後的第一要務就是解決問題,防止問題繼續惡化。那麼,應該如何操作?
查找線程
有兩種方法可以查看正在運行的線程。
進入到mysql/bin目錄下,執行mysqladmin processlist
連上MySQL,輸入show processlist;命令查看
我們用Navicat登錄localhost簡單看一下,結果如下:
結果中每一行對應一個連接,每一列的含義如下:
Id:thread_id,線程id;
User:用戶,如果你不是root,那麼只能看到權限範圍內的SQL;
Host:可以看到來源IP和端口,結合netstat或lsof命令可快速定位進程;
db:當前DB實例;
Command:當前執行的命令,通常是sleep、query、connect ;
Time:當前狀態持續了多少秒;
State:當前狀態;
Info:當前語句;
殺死線程
執行kill id命令即可殺死卡頓的線程
常見原因
造成線程卡頓的原因有很多,但是很多時候通常只有兩種:
鎖競爭
慢查詢
閱讀更多 架構之美 的文章