婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 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不掉線程的原因的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲人xxxx| 韩日av一区二区| 成人午夜电影久久影院| 国产精品国产三级国产普通话蜜臀 | 综合自拍亚洲综合图不卡区| 久久国产成人午夜av影院| 678五月天丁香亚洲综合网| 午夜欧美视频在线观看| 宅男噜噜噜66一区二区66| 蜜桃传媒麻豆第一区在线观看| 日韩欧美成人一区二区| 久久综合色播五月| 99久久精品国产观看| 不卡的av中国片| 成人美女视频在线观看| 国产精品综合网| 福利91精品一区二区三区| 国产精品亚洲人在线观看| 久久精品国产一区二区三 | 成人精品一区二区三区四区| 狠狠色综合日日| 精品一区二区免费在线观看| 久久精品国产精品亚洲红杏| 成人av中文字幕| 亚洲电影欧美电影有声小说| 欧美videossexotv100| 成人涩涩免费视频| 天天色综合天天| 国产女人18毛片水真多成人如厕| 一本大道av伊人久久综合| 午夜精品久久久久影视| 国产婷婷色一区二区三区在线| 91精彩视频在线| 国产综合成人久久大片91| 一区二区三区四区视频精品免费 | 国产三级欧美三级| 欧美性一区二区| 国产成人高清在线| 亚洲成人动漫在线观看| 国产精品女上位| 欧美va在线播放| 欧美性高清videossexo| 国产成人av福利| 久久99久久99| 午夜精品视频在线观看| 亚洲视频一二区| 久久精品视频在线免费观看| 欧美日韩在线精品一区二区三区激情| 成人高清免费在线播放| 精品影视av免费| 婷婷国产v国产偷v亚洲高清| 亚洲手机成人高清视频| 2019国产精品| 日韩女优毛片在线| 欧美久久久久免费| 色中色一区二区| 日韩av中文在线观看| 亚洲国产视频在线| 国产精品不卡在线| 国产精品乱码一区二区三区软件| 精品美女被调教视频大全网站| 欧美精品视频www在线观看| 在线欧美一区二区| 色吧成人激情小说| www.欧美亚洲| 色婷婷av一区二区三区之一色屋| 成人网男人的天堂| 国产精品一级在线| 91网站在线播放| 99久久精品免费| 日本韩国视频一区二区| 欧美性三三影院| 欧美精品九九99久久| 51精品秘密在线观看| 777午夜精品免费视频| 欧美日韩免费观看一区三区| 欧美久久久久久蜜桃| 欧美一区二区成人6969| 91麻豆精品国产91| 日韩午夜电影在线观看| www国产精品av| 国产精品视频看| 亚洲欧美日韩国产综合| 亚洲久草在线视频| 亚洲最大色网站| 亚洲国产综合色| 秋霞电影网一区二区| 久久er99精品| 国产成人福利片| 91在线观看污| 欧美日韩国产一级| 91久久香蕉国产日韩欧美9色| 不卡的av电影在线观看| 日韩成人免费看| 国产午夜精品福利| 欧美日韩免费高清一区色橹橹 | 欧美大片在线观看一区| 麻豆精品视频在线观看| 五月综合激情网| 久久99精品久久久久| 色屁屁一区二区| 中文字幕日本乱码精品影院| 粉嫩一区二区三区性色av| 欧美va在线播放| 美日韩一区二区| 欧美一区二区福利在线| 日本不卡1234视频| 精品国精品国产尤物美女| 蜜臀av一级做a爰片久久| 日韩一卡二卡三卡四卡| 免费在线看一区| 2020国产精品自拍| 成人精品一区二区三区四区| 国产精品久久久久永久免费观看| 国产大陆精品国产| 中文字幕一区二区三区视频| 91麻豆精品在线观看| 亚洲成人av资源| 国产精品久久三区| 成人美女在线视频| 一区二区三区蜜桃| 欧美日韩一区二区三区不卡| 天天亚洲美女在线视频| 久久久天堂av| av在线不卡电影| 亚洲国产aⅴ天堂久久| 欧美一二三区在线| 国产电影一区二区三区| 一区二区三区欧美视频| 日韩一区二区三区免费观看| 国产二区国产一区在线观看| 亚洲美女电影在线| 日韩欧美激情在线| 91麻豆精东视频| 欧美a一区二区| 国产精品初高中害羞小美女文| 欧美系列一区二区| 国产精品88av| 亚洲成人中文在线| 国产免费久久精品| 欧美年轻男男videosbes| 国产高清成人在线| 日韩成人一级大片| **欧美大码日韩| 日韩视频一区二区在线观看| 不卡的看片网站| 精品一区二区三区视频| 亚洲一区二区免费视频| 国产欧美一区二区三区在线老狼 | 91在线观看一区二区| 蜜桃一区二区三区在线观看| 亚洲欧美激情视频在线观看一区二区三区| 欧美日韩aaa| www.欧美精品一二区| 久久成人综合网| 天天av天天翘天天综合网色鬼国产| 国产精品视频线看| 精品日韩av一区二区| 欧美日韩日日摸| 色综合久久久久综合| 国产毛片精品视频| 久久精品国产亚洲高清剧情介绍| 亚洲一区在线电影| 日韩一区中文字幕| 欧美国产禁国产网站cc| 欧美xxxxx裸体时装秀| 在线不卡a资源高清| 91福利在线播放| 91麻豆swag| 粉嫩久久99精品久久久久久夜 | 日韩国产欧美一区二区三区| 欧美剧情片在线观看| 91老司机福利 在线| 99这里只有久久精品视频| 国产成人亚洲精品狼色在线| 国产在线视频不卡二| 久久成人免费日本黄色| 日韩激情视频在线观看| 婷婷六月综合网| 午夜精品一区二区三区电影天堂 | 成人精品视频一区二区三区| 狠狠色丁香九九婷婷综合五月| 日韩黄色免费网站| 美女视频一区在线观看| 精品亚洲成a人在线观看| 激情国产一区二区| 成人av网站在线观看| 91官网在线观看| 777xxx欧美| 久久午夜老司机| 国产精品国产三级国产aⅴ中文| 欧美国产精品久久| 亚洲午夜精品网| 蜜臀久久99精品久久久画质超高清| 久久精品免费观看| 99在线精品一区二区三区| 欧美日韩中文字幕一区二区| 欧美成人女星排名| 国产欧美精品一区| 亚洲激情av在线|