如何kill掉卡頓的MySQL線程?
作為一個(gè)開發(fā)人員或者數(shù)據(jù)庫管理員,學(xué)會(huì)檢查數(shù)據(jù)庫運(yùn)行情況是必不可少的工作。造成MySQL線程卡頓的原因有很多,比如deadlock,但是無論是哪種原因,我們發(fā)現(xiàn)問題之后的***要?jiǎng)?wù)就是解決問題,防止問題繼續(xù)惡化。那么,應(yīng)該如何操作?
查找線程
有兩種方法可以查看正在運(yùn)行的線程。
-
進(jìn)入到mysql/bin目錄下,執(zhí)行mysqladmin processlist
-
連上MySQL,輸入show processlist;命令查看
我們用Navicat登錄localhost簡(jiǎn)單看一下,結(jié)果如下:
結(jié)果中每一行對(duì)應(yīng)一個(gè)連接,每一列的含義如下:
Id:thread_id,線程id;
User:用戶,如果你不是root,那么只能看到權(quán)限范圍內(nèi)的SQL;
Host:可以看到來源IP和端口,結(jié)合netstat或lsof命令可快速定位進(jìn)程;
db:當(dāng)前DB實(shí)例;
Command:當(dāng)前執(zhí)行的命令,通常是sleep、query、connect ;
Time:當(dāng)前狀態(tài)持續(xù)了多少秒;
State:當(dāng)前狀態(tài);
Info:當(dāng)前語句;
殺死線程
執(zhí)行kill id命令即可殺死卡頓的線程
常見原因
造成線程卡頓的原因有很多,但是很多時(shí)候通常只有兩種:
-
鎖競(jìng)爭(zhēng)
-
慢查詢