首页
/
每日頭條
/
職場
/
kill命令的使用技巧
kill命令的使用技巧
更新时间:2026-01-09 12:00:45
前言

在平時使用MySQL的過程中,不知道你是否遇到一個查詢很長時間沒有出結果,這個時候,你可能會:執行kill query 線程id來終止這個查詢語句;或者,kill connectIOn 線程id斷開連接;又或者,Ctrl C結束線程終止查詢。

但是,是不是會發現一個奇怪的現象,可能你在客戶端感覺不到,但是這個時候如果有交易并且涉及剛剛查詢的表,可能就會超時,看binlog日志會發現查詢并沒有結束?這是為什麼呢?

其實大多數情況下,kill query/connection 命令是有效的。比如,執行一個查詢的過程中,發現執行時間太久,要放棄繼續查詢,這時我們就可以用 kill query 命令,終止這條查詢語句。

還有一種情況是,語句處于鎖等待的時候,直接使用 kill 命令也是有效的。如下:

kill命令的使用技巧(老闆不了解kill原理)1

但是,我們思考一下:session B 是直接終止掉線程,什麼都不管就直接退出嗎?顯然,這是不行的。

線程收到kill指令後做什麼呢?

了解一定MySQL的人應該都知道,當對一個表做增删改查操作時,會在表上加 MDL 讀鎖。上圖session B 雖然處于 blocked 狀态,但還是拿着一個 MDL 讀鎖的。如果線程被 kill 的時候,就直接終止,那之後這個 MDL 讀鎖就沒機會被釋放了。

由此,我們可以了解到,線程收到kill指令後并不會馬上停止,而是會等執行完當前的操作才會停止。

其實,這跟 Linux 的 kill 命令類似,kill -N pid 并不是讓進程直接停止,而是給進程發一個信号,然後進程處理這個信号,進入終止邏輯。隻是對于 MySQL 的 kill 命令來說,不需要傳信号量參數,就隻有“停止”這個命令。

kill query thread_id過程

MySQL線程收到kill query thread_id_B指令後,做了兩件事:

  1. 把 session B 的運行狀态改成 THD::KILL_QUERY(将變量 killed 賦值為 THD::KILL_QUERY);
  2. 給 session B 的執行線程發一個信号。發一個信号的目的,就是讓 session B 退出等待,來處理這個 THD::KILL_QUERY 狀态。
kill不掉的查詢-線程沒有執行到判斷線程狀态
  • 前提

setglobal InnoDB_thread_concurrency=2,将 InnoDB 的并發線程上限數設置為 2;

kill命令的使用技巧(老闆不了解kill原理)2

可以看到:

  1. sesssion C 執行的時候被堵住了;
  2. 但是 session D 執行的 kill query C 命令卻沒什麼效果,
  3. 直到 session E 執行了 kill connection 命令,才斷開了 session C 的連接,提示“Lost connection to MySQL server during query”
  4. 但是這時候,如果在 session E 中執行 show processlist,你就能看到下面這個圖。

kill命令的使用技巧(老闆不了解kill原理)3

在這個例子裡,12 号線程的等待邏輯是這樣的:每 10 毫秒判斷一下是否可以進入 InnoDB 執行,如果不行,就調用 nanosleep 函數進入 sleep 狀态。

也就是說,雖然 12 号線程的狀态已經被設置成了 KILL_QUERY,但是在這個等待進入 InnoDB 的循環過程中,并沒有去判斷線程的狀态,因此根本不會進入終止邏輯階段。

那為什麼執行 show processlist 的時候,會看到 Command 列顯示為 killed 呢?其實,這就是因為在執行 show processlist 的時候,有一個特别的邏輯:

如果一個線程的狀态是KILL_CONNECTION,就把Command列顯示成Killed。

這個例子是 kill 無效的第一類情況,即:線程沒有執行到判斷線程狀态的邏輯。跟這種情況相同的,還有由于 IO 壓力過大,讀寫 IO 的函數一直無法返回,導緻不能及時判斷線程的狀态。

kill不掉的查詢-終止邏輯耗時較長

這類情況常見的幾種場景:

  1. 超大事務執行期間被 kill。這時候,回滾操作需要對事務執行期間生成的所有新數據版本做回收操作,耗時很長。
  2. 大查詢回滾。如果查詢過程中生成了比較大的臨時文件,加上此時文件系統壓力大,删除臨時文件可能需要等待 IO 資源,導緻耗時較長。
  3. DDL 命令執行到最後階段,如果被 kill,需要删除中間過程的臨時文件,也可能受 IO 資源影響耗時較久。
Ctrl C

相信大家一定在客戶端執行查詢時,使用過Ctrl C終止查詢吧,在客戶端看起來是終止,但是,其實查詢并不一定立馬終止了的。

其實在客戶端的操作隻能操作到客戶端的線程,客戶端和服務端隻能通過網絡交互,是不可能直接操作服務端線程的。

而由于 MySQL 是停等協議,所以這個線程執行的語句還沒有返回的時候,再往這個連接裡面繼續發命令也是沒有用的。

實際上,執行 Ctrl C 的時候,是 MySQL 客戶端另外啟動一個連接,然後發送一個 kill query 命令。所以,Ctrl C最終還是要執行kill query的流程的。

總結

今天,給大家介紹了一些kill不掉的情況,這些“kill 不掉”的情況,其實是因為發送 kill 命令的客戶端,并沒有強行停止目标線程的執行,而隻是設置了個狀态,并喚醒對應的線程。而被 kill 的線程,需要執行到判斷狀态的“埋點”,才會開始進入終止邏輯階段。并且,終止邏輯本身也是需要耗費時間的。

所以,如果你發現一個線程處于 Killed 狀态,你可以做的事情就是,通過影響系統環境,讓這個 Killed 狀态盡快結束。

另外,這裡還有一點要跟大家強調下的,也是我在實際工作中的了解:

  1. 如果我們要查詢一些數據,盡量不要查詢主庫,因為主庫上有很多交易的寫操作,盡量在從庫執行,影響小一些。
  2. 不要在生産執行複雜的大查詢,即使是從庫也是會影響到正常交易的讀操作的。
  3. 如果真的需要周期性查詢一些數據,可以選擇從大數據中心的備份數據裡讀取,大數據中心一般都會同步生産系統的相關表和數據的。或者可以通過程序在非交易時間段(或交易量少的時候)進行查詢。

以上,希望有幫助到大家,在客戶端執行查詢一定要先分析sql是否可以在生産執行呢~可以先在準生産環境先執行也是能防患未然的呢。

(歡迎關注留言~一起學習進步呀)

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
甘薇産子生的還是剖的(甘薇挺臨盆巨肚工作到淩晨)
甘薇産子生的還是剖的(甘薇挺臨盆巨肚工作到淩晨)
  近日懷二胎即将臨盆的甘薇在微博曬出一組工作照,挺着大肚子的她直接累得睡在椅子上。甘薇附文:“終于彩排完了。太累了,累得我想哭。忙完發布會,我也該休息了。公司的同事們都怕我在台上突然發作,要生了怎麼辦,恨不得,把救護車和輪椅都給我準備好了。”      被封為“拼命三娘”的甘薇,6月份也曾在微博曬出工作照,并配文稱:“從早上十一點開會,腰都快要累斷了。到現...
2026-01-09
鐘淑慧個人寫真(香港風月女星鐘淑慧)
鐘淑慧個人寫真(香港風月女星鐘淑慧)
  #頭條創作挑戰賽#   對于鐘淑慧,相比于之前提到的那些風月女星,她的人氣不高,走紅程度也不及前面的幾位,但說到香港風月女星,小編還是想談談鐘淑慧,不為别的,隻是因為她的經曆也堪稱是比電影還精彩的故事了。      鐘淑慧   鐘淑慧出生于1964年,祖籍是廣東梅州。與其他女藝人的走紅相似但是卻又有着極大的不同,鐘淑慧本人是環球小姐出身的。在那個年代,選...
2026-01-09
絕地求生小智現狀(國内絕地求生的主播隊和職業隊沒區别)
絕地求生小智現狀(國内絕地求生的主播隊和職業隊沒區别)
  近日,絕地求生圈鬧得轟轟烈烈的“某民賀歲杯”再次引起了讨論,因為目前藍洞官方已經對此做出了回應,在某民發出的回應中可以看到,藍洞官方表示QM戰隊确實沒有開挂,但是針對視頻中的疑點卻無法解釋。   藍洞回應:  無獨有偶,就在回應發出來的幾十分鐘前,小智則與好友小龍洽淡此事。小智還表示,如果藍洞回應QM戰隊沒開挂的話,這些職業戰隊選手的臉要“沒地方擱了”。...
2026-01-09
安德魯和艾瑪的愛情(艾瑪史東似魔戒精靈弓箭手)
安德魯和艾瑪的愛情(艾瑪史東似魔戒精靈弓箭手)
  自從《愛樂之城》名聲大噪後,奧斯卡影後艾瑪史東陸續接下各種戲路,近期曝光正在拍攝的Netflix新劇《Maniac》,仔細一看那頭金色長發與奧蘭多布魯知名作品《魔戒》裡的精靈弓箭手相似度近乎百分百呀!      耳朵同樣利用特殊化妝變成精靈耳,咖啡色鬥篷配上長靴,背着長長的弓箭,新戲造型一公開,連奧蘭多布魯(Orlando Bloom)也在instagr...
2026-01-09
想出去上班婆婆找各種借口(趕緊把工作辭了)
想出去上班婆婆找各種借口(趕緊把工作辭了)
  對于女人來說,婆媳矛盾就是婚後的一道坎,避無可避,特别是在結婚前,婆婆對兒媳就有了意見,那婚後自然也就很難和諧相處,若是在同個屋檐下,矛盾更是會層出不窮,久而久之,婆媳關系就會愈演愈烈,最終影響到婚姻關系。   俗話說十年看婆,十年看媳,既然有緣成為一家人,又何必去計較太多,畢竟人生在世,世事難料,在遇到困難或者麻煩時,會在身邊幫你的隻有親人,塗磊曾說,...
2026-01-09
Copyright 2023-2026 - www.tftnews.com All Rights Reserved