亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > MySQL kill不掉線程的原因

MySQL kill不掉線程的原因

熱門標簽:html地圖標注并導航 大豐地圖標注app 南太平洋地圖標注 催天下外呼系統 400電話辦理服務價格最實惠 400電話變更申請 武漢電銷機器人電話 北京金倫外呼系統 呂梁外呼系統

背景

在日常的使用過程中,時不時會遇到個別,或者大量的連接堆積在 MySQL 中的現象,這時一般會考慮使用 kill 命令強制殺死這些長時間堆積起來的連接,盡快釋放連接數和數據庫服務器的 CPU 資源。

問題描述

在實際操作 kill 命令的時候,有時候會發現連接并沒有第一時間被 kill 掉,仍舊在 processlist 里面能看到,但是顯示的 Command 為 Killed,而不是常見的 Query 或者是 Execute 等。例如:

mysql> show processlist;
+----+------+--------------------+--------+---------+------+--------------+---------------------------------+
| Id | User | Host               | db     | Command | Time | State        | Info                            |
+----+------+--------------------+--------+---------+------+--------------+---------------------------------+
| 31 | root | 192.168.1.10:50410 | sbtest | Query   |    0 | starting     | show processlist                |
| 32 | root | 192.168.1.10:50412 | sbtest | Query   |   62 | User sleep   | select sleep(3600) from sbtest1 |
| 35 | root | 192.168.1.10:51252 | sbtest | Killed  |   47 | Sending data | select sleep(100) from sbtest1  |
| 36 | root | 192.168.1.10:51304 | sbtest | Query   |   20 | Sending data | select sleep(3600) from sbtest1 |
+----+------+--------------------+--------+---------+------+--------------+---------------------------------+

原因分析

遇事不決先翻官方文檔,這里摘取部分官方文檔的內容:

When you use KILL, a thread-specific kill flag is set for the thread. In most cases, it might take some time for the thread to die because the kill flag is checked only at specific intervals:During SELECT operations, for ORDER BY and GROUP BY loops, the flag is checked after reading a block of rows. If the kill flag is set, the statement is aborted.
      ALTER TABLE operations that make a table copy check the kill flag periodically for each few copied rows read from the original table. If the kill flag was set, the statement is aborted and the temporary table is deleted.
      The KILL statement returns without waiting for confirmation, but the kill flag check aborts the operation within a reasonably small amount of time. Aborting the operation to perform any necessary cleanup also takes some time.
      During UPDATE or DELETE operations, the kill flag is checked after each block read and after each updated or deleted row. If the kill flag is set, the statement is aborted. If you are not using transactions, the changes are not rolled back.
      GET_LOCK() aborts and returns NULL.
      If the thread is in the table lock handler (state: Locked), the table lock is quickly aborted.
      If the thread is waiting for free disk space in a write call, the write is aborted with a “disk full” error message.

官方文檔第一段就很明確的說清楚了 kill 的作用機制:會給連接的線程設置一個線程級別的 kill 標記,等到下一次“標記檢測”的時候才會生效。這也意味著如果下一次“標記檢測”遲遲沒有發生,那么就有可能會出現問題描述中的現象。

官方文檔中列舉了不少的場景,這里根據官方的描述列舉幾個比較常見的問題場景:

  • select 語句中進行 order by,group by 的時候,如果服務器 CPU 資源比較緊張,那么讀取/獲取一批數據的時間會變長,從而影響下一次“標記檢測”的時間。
  • 對大量數據進行 DML 操作的時候,kill 這一類 SQL 語句會觸發事務回滾(InnoDB引擎),雖然語句被 kill 掉了,但是回滾操作也會非常久。
  • kill alter 操作時,如果服務器的負載比較高,那么操作一批數據的時間會變長,從而影響下一次“標記檢測”的時間。
  • 其實參考 kill 的作用機制,做一個歸納性的描述的話,那么:任何阻塞/減慢 SQL 語句正常執行的行為,都會導致下一次“標記檢測”推遲、無法發生,最終都會導致 kill 操作的失敗。

模擬一下

這里借用一個參數innodb_thread_concurrency來模擬阻塞 SQL 語句正常執行的場景:

Defines the maximum number of threads permitted inside of InnoDB. A value of 0 (the default) is interpreted as infinite concurrency (no limit). This variable is intended for performance tuning on high concurrency systems.

參照官方文檔的描述,這個參數設置得比較低的時候,超過數量限制的 InnoDB 查詢會被阻塞。因此在本次模擬中,這個參數被設置了一個非常低的值。

mysql> show variables like '%innodb_thread_concurrency%';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| innodb_thread_concurrency | 1     |
+---------------------------+-------+
1 row in set (0.00 sec)

然后開兩個數據庫連接(Session 1 和 Session 2),分別執行select sleep(3600) from sbtest.sbtest1語句,然后在第三個連接上 kill 掉 Session 2 的查詢:

Session 1:
mysql> select sleep(3600) from sbtest.sbtest1;

Session 2:
mysql> select sleep(3600) from sbtest.sbtest1;
ERROR 2013 (HY000): Lost connection to MySQL server during query
mysql>

Session 3:
mysql> show processlist;
+----+------+--------------------+------+---------+------+--------------+----------------------------------------+
| Id | User | Host               | db   | Command | Time | State        | Info                                   |
+----+------+--------------------+------+---------+------+--------------+----------------------------------------+
| 44 | root | 172.16.64.10:39290 | NULL | Query   |   17 | User sleep   | select sleep(3600) from sbtest.sbtest1 |
| 45 | root | 172.16.64.10:39292 | NULL | Query   |    0 | starting     | show processlist                       |
| 46 | root | 172.16.64.10:39294 | NULL | Query   |    5 | Sending data | select sleep(3600) from sbtest.sbtest1 |
+----+------+--------------------+------+---------+------+--------------+----------------------------------------+
3 rows in set (0.00 sec)

mysql> kill 46;
Query OK, 0 rows affected (0.00 sec)

mysql> show processlist;
+----+------+--------------------+------+---------+------+--------------+----------------------------------------+
| Id | User | Host               | db   | Command | Time | State        | Info                                   |
+----+------+--------------------+------+---------+------+--------------+----------------------------------------+
| 44 | root | 172.16.64.10:39290 | NULL | Query   |   26 | User sleep   | select sleep(3600) from sbtest.sbtest1 |
| 45 | root | 172.16.64.10:39292 | NULL | Query   |    0 | starting     | show processlist                       |
| 46 | root | 172.16.64.10:39294 | NULL | Killed  |   14 | Sending data | select sleep(3600) from sbtest.sbtest1 |
+----+------+--------------------+------+---------+------+--------------+----------------------------------------+
3 rows in set (0.00 sec)

mysql>

可以看到,kill 命令執行之后,Session 2 的連接馬上就斷開了,但是 Session 2 發起的查詢仍舊殘留在 MySQL 中。當然,如果是因為innodb_thread_concurrency這個參數導致了類似的問題的話,直接使用set global的命令調高上限,或者直接設置為 0 就可以解決,這個參數的變更是實時對所有連接生效的。

總結一下

MySQL 的 kill 操作并不是想象中的直接強行終止數據庫連接,只是發送了一個終止的信號,如果 SQL 自身的執行效率過慢,或者受到其他的因素影響(服務器負載高,觸發大量數據回滾)的話,那么這個 kill 的操作很有可能并不能及時終止這些問題查詢,反而可能會因為程序側連接被斷開之后觸發重連,產生更多的低效查詢,進一步拖垮數據庫。

以上就是MySQL kill不掉線程的原因的詳細內容,更多關于MySQL kill線程的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 詳解MySQL kill 指令的執行原理
  • MySQL kill指令使用指南
  • Mysql誤刪數據解決方案及kill語句原理
  • Mysql使用kill命令解決死鎖問題(殺死某條正在執行的sql語句)
  • MySQL Slave 觸發 oom-killer解決方法
  • MySQL OOM 系列三 擺脫MySQL被Kill的厄運
  • MySQL OOM 系統二 OOM Killer
  • percona-toolkit之pt-kill 殺掉mysql查詢或連接的方法
  • 批量 kill mysql 中運行時間長的sql

標簽:麗水 南充 西寧 自貢 龍巖 無錫 徐州 迪慶

巨人網絡通訊聲明:本文標題《MySQL kill不掉線程的原因》,本文關鍵詞  MySQL,kill,不掉,線程,的,原因,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL kill不掉線程的原因》相關的同類信息!
  • 本頁收集關于MySQL kill不掉線程的原因的相關信息資訊供網民參考!
  • 推薦文章
    国产视频久久久| 欧美激情在线精品video| 国产高清视频免费| 九九精品在线| 亚洲第一色在线| 欧美a免费| 日韩免费在线观看视频| 黄视频网站在线免费观看| 青青久久网| 国产成人欧美一区二区三区的| 国产成人精品综合久久久| 色综合久久天天综线观看| 国产不卡高清在线观看视频| 麻豆污视频| 亚洲精品永久一区| 欧美a级大片| 日韩在线观看视频黄| 欧美日本二区| 四虎影视库国产精品一区| 国产综合91天堂亚洲国产| 精品视频在线观看视频免费视频| 欧美激情伊人| 欧美电影免费| 欧美电影免费看大全| 国产91视频网| 久久久久久久久综合影视网| 欧美一级视频免费| 麻豆系列 在线视频| 日本在线播放一区| 亚飞与亚基在线观看| 亚飞与亚基在线观看| 在线观看导航| 精品视频一区二区三区| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 四虎影视久久| 亚洲精品永久一区| 精品国产三级a| 国产综合成人观看在线| 日韩中文字幕在线亚洲一区| 夜夜操天天爽| 99热热久久| 成人免费观看的视频黄页| 99色视频在线观看| 国产伦久视频免费观看视频| 免费一级片在线| 香蕉视频一级| 一级毛片视频在线观看| 欧美电影免费看大全| 国产综合91天堂亚洲国产| 亚洲第一视频在线播放| 黄色福利片| 天天做日日爱夜夜爽| 尤物视频网站在线| 香蕉视频三级| 精品视频一区二区| 四虎精品在线观看| 韩国三级视频网站| 美女免费毛片| 青青青草影院 | 亚洲女初尝黑人巨高清在线观看| 99久久精品国产国产毛片| 91麻豆精品国产自产在线观看一区| 国产成人女人在线视频观看 | 久久成人综合网| 久久精品道一区二区三区| 日韩在线观看视频黄| 国产伦精品一区三区视频| 免费国产在线观看不卡| 高清一级毛片一本到免费观看| 日本伦理片网站| 亚洲天堂一区二区三区四区| 国产一区国产二区国产三区| 色综合久久天天综合| 九九九网站| 欧美国产日韩在线| 99久久精品国产麻豆| 久久国产精品自线拍免费| 日韩免费在线观看视频| 日本在线不卡免费视频一区| 日韩av成人| 久久国产精品只做精品| 日韩在线观看视频黄| 97视频免费在线| 在线观看成人网 | 精品国产一区二区三区精东影业 | 国产不卡精品一区二区三区| 毛片成人永久免费视频| 国产成人精品影视| 久久精品道一区二区三区| 欧美激情一区二区三区在线播放| 日本免费看视频| 欧美爱色| 九九免费精品视频| 国产91素人搭讪系列天堂| 青青久在线视频| 成人免费一级纶理片| 国产网站免费视频| 国产精品自拍在线观看| 欧美激情一区二区三区在线 | 国产91视频网| 麻豆系列国产剧在线观看| 99久久精品国产国产毛片| 国产91精品一区二区| 亚洲第一色在线| 韩国三级视频网站| 99久久精品国产高清一区二区| 成人在免费观看视频国产| 四虎影视库| 九九久久99综合一区二区| 91麻豆高清国产在线播放| 亚洲 国产精品 日韩| 亚欧乱色一区二区三区| 国产成a人片在线观看视频| 精品国产三级a∨在线观看| 精品国产一区二区三区精东影业 | 精品在线免费播放| 欧美激情一区二区三区在线播放| 国产成人精品影视| 精品国产一区二区三区久久久蜜臀| 欧美另类videosbestsex高清| 韩国毛片基地| 成人高清免费| 亚洲女初尝黑人巨高清在线观看| 黄视频网站在线免费观看| 久久国产一区二区| 免费一级片在线| 麻豆系列 在线视频| 美国一区二区三区| 国产伦精品一区三区视频| 日韩在线观看视频黄| 国产网站麻豆精品视频| 久久精品道一区二区三区| 亚洲天堂免费| 国产成+人+综合+亚洲不卡| 国产极品白嫩美女在线观看看| 亚洲精品中文一区不卡| 色综合久久天天综线观看| 韩国三级视频在线观看| 一级女性大黄生活片免费| 久久国产影视免费精品| 91麻豆tv| 日韩一级黄色片| 麻豆网站在线免费观看| 黄色免费三级| 黄色短视频网站| 九九精品在线播放| 韩国毛片 免费| 沈樵在线观看福利| 精品国产香蕉伊思人在线又爽又黄| 人人干人人草| 韩国三级视频在线观看| 精品视频免费看| 美国一区二区三区| 亚洲精品久久玖玖玖玖| 国产一区国产二区国产三区| 国产一区二区精品尤物| 欧美大片一区| 天堂网中文字幕| 毛片成人永久免费视频| 欧美激情在线精品video| 久久国产精品自由自在| 国产一区二区精品久久91| 四虎影视久久| 可以免费看毛片的网站| 久久精品欧美一区二区| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 久久久久久久免费视频| 日日日夜夜操| 国产网站免费观看| 欧美激情伊人| 一级女人毛片人一女人| 日韩在线观看视频网站| 精品国产一区二区三区久 | 久久国产影视免费精品| 精品视频在线观看视频免费视频| 青青久久国产成人免费网站| 亚洲精品中文一区不卡| 午夜精品国产自在现线拍| 国产不卡精品一区二区三区| 天天做日日干| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日韩在线观看免费完整版视频| 二级片在线观看| 国产视频久久久| 青青久久精品| 国产麻豆精品免费密入口| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产成人女人在线视频观看 | 色综合久久天天综线观看| 国产91精品一区二区| 青青久在线视频| 免费的黄色小视频| 国产成+人+综合+亚洲不卡| 美女被草网站| 精品久久久久久中文| 国产a视频| 久久99中文字幕久久| 黄视频网站在线免费观看| 午夜欧美福利| 国产网站麻豆精品视频|