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

主頁 > 知識(shí)庫 > 詳解MySQL kill 指令的執(zhí)行原理

詳解MySQL kill 指令的執(zhí)行原理

熱門標(biāo)簽:外呼系統(tǒng)打電話上限是多少 怎樣在地圖標(biāo)注銷售區(qū)域 地圖標(biāo)注費(fèi)用是多少 百應(yīng)電話機(jī)器人優(yōu)勢(shì) 曲靖移動(dòng)外呼系統(tǒng)公司 電話外呼系統(tǒng)改號(hào) 武漢網(wǎng)絡(luò)外呼系統(tǒng)服務(wù)商 南昌三維地圖標(biāo)注 啥是企業(yè)400電話辦理

kill 指令有兩種寫法 " kill query + 線程 id "、" kill connection(可缺省) + 線程 id "。分別表示關(guān)閉指定線程正在執(zhí)行的語句、斷開指定線程連接的客戶端(如果有正在執(zhí)行的操作會(huì)先停止執(zhí)行的操作再關(guān)閉連接)。但某些情況下使用 kill query 后使用 show processlist 查看 Command 列為 killed(表示 正在等待回收線程回收,還未回收),這是為什么呢?

在解答這個(gè)問題前,需要知道服務(wù)器端處理請(qǐng)求的線程是如何執(zhí)行的,以及 kill 命令是如何作用的。

Kill 指令執(zhí)行原理

指令執(zhí)行特點(diǎn)

1、 一個(gè)語句執(zhí)行過程中有多處 " 埋點(diǎn) ",在這些 " 埋點(diǎn) " 的地方判斷線程狀態(tài),如果發(fā)現(xiàn)線程狀態(tài)是 THD:KILL_QUERY,才開始進(jìn)入語句終止邏輯;

2、如果處于等待狀態(tài),必須是一個(gè)可以被喚醒的等待,否則根本不會(huì)執(zhí)行到“埋點(diǎn)”處;

3、語句從開始進(jìn)入終止邏輯,到終止邏輯完全完成,是有一個(gè)過程的。

kill query 執(zhí)行原理

kill query 主要進(jìn)行了兩步操作:

1、把線程的運(yùn)行狀態(tài)改成 THD::KILL_QUERY(將變量 killed 賦值為 THD::KILL_QUERY);

2、給會(huì)話的執(zhí)行線程發(fā)一個(gè)信號(hào),退出阻塞狀態(tài),處理這個(gè)狀態(tài)。

Kill Connection 執(zhí)行原理

1、把 12 號(hào)線程狀態(tài)設(shè)置為 KILL_CONNECTION;

2、關(guān)掉 12 號(hào)線程的網(wǎng)絡(luò)連接。

是否可以被中斷判斷

1、一般正常執(zhí)行的語句在執(zhí)行 kill query 后都會(huì)先將狀態(tài)從 killed 改成 KILL_QUERY,然后執(zhí)行到 " 埋點(diǎn) " 處被判斷中斷執(zhí)行。

2、如果是處于阻塞的語句,那么需要去查看當(dāng)前阻塞等待的狀態(tài)是否可以被喚醒,如果可以被喚醒才有機(jī)會(huì)中斷當(dāng)前語句。

可以被中斷的場(chǎng)景:正常執(zhí)行或者處于可以被喚醒的阻塞等待狀態(tài)。

因?yàn)榈刃墟i時(shí),使用的是 pthread_cond_timedwait 函數(shù),所以這個(gè)等待狀態(tài)可以被喚醒。可以被 kill query 直接喚醒繼續(xù)執(zhí)行直到 "埋點(diǎn)" 判斷。

不可以被中斷的場(chǎng)景:被阻塞且不能被喚醒。

例子:因并發(fā)線程被使用完而造成的阻塞。

將參數(shù) innodb_thread_concurrency(MySQL 的并發(fā)線程數(shù))設(shè)為 2。然后執(zhí)行下面的操作:

在 sessionD 執(zhí)行 kill query C 后 sessionC 并沒有退出阻塞。

  • 問題1:為什么使用 kill query 沒有中斷阻塞?

答:因?yàn)檫@種阻塞從微觀上來看并不是阻塞,而是一種循環(huán)判斷。每隔 10 毫秒判斷一下是否可以進(jìn)入 Innodb 執(zhí)行,如果不行,就調(diào)用 nanosleep 函數(shù)進(jìn)入 sleep 狀態(tài)。也就是說,雖然線程的狀態(tài)已經(jīng)被設(shè)置成了 KILL_QUERY(THD::KILL_QUERY),但是在這個(gè)等待進(jìn)入 InnoDB 的循環(huán)過程中,并沒有執(zhí)行到 "埋點(diǎn)",也就沒有去判斷線程的狀態(tài),因此根本不會(huì)進(jìn)入終止邏輯階段。所以也就不會(huì)中斷。

  • 問題2:如果此時(shí)使用 show processlist 來查看,會(huì)發(fā)現(xiàn) Command 列為 killed,這是為什么?

答:kill query 語句會(huì)將線程狀態(tài)設(shè)為 KILL_QUERY ,這時(shí)會(huì)因?yàn)檫@個(gè)狀態(tài)而被判斷為正在執(zhí)行中斷邏輯,所以 Command 值為 killed。

  • 問題3:為什么使用 kill connection 可以中斷阻塞?

答:因?yàn)?kill connection 會(huì)直接關(guān)閉線程的網(wǎng)絡(luò)連接,強(qiáng)制關(guān)閉,所以這時(shí)候 session C 收到了斷開連接的提示。

  • 問題4:如果只是使用 kill query 什么時(shí)候才能中斷阻塞?

答:只有等到會(huì)話被分配了線程后執(zhí)行到 “ 埋點(diǎn) ” 后判斷然后執(zhí)行中斷邏輯才會(huì)退出。而被分配線程后并不是就一定會(huì)中斷,如果在執(zhí)行到 "埋點(diǎn)" 之前讓出線程,那么就會(huì)再次等待。MySQL 的線程是多路復(fù)用的。

其他

1、其實(shí)除了上面使用 kill 命令來終止阻塞狀態(tài)外,還可以直接在該會(huì)話中使用 “ ctrl+c ” 來中止阻塞,這又是什么原理呢?

 答:首先要知道客戶端操作服務(wù)端是客戶端開啟一個(gè)線程,讓這個(gè)線程去處理,發(fā)送請(qǐng)求數(shù)據(jù),通過網(wǎng)絡(luò)傳輸?shù)椒?wù)端,服務(wù)端再分配線程去處理。而 "ctrl +c " 是讓客戶端另開一個(gè)連接,并發(fā)送一個(gè) kill query 的命令。所以雖然我們看來是中斷了阻塞,但是處理上一個(gè)連接的服務(wù)端線程并一定就會(huì)被中斷。

2、為什么在指定庫名連接時(shí)會(huì)很慢?如下圖:

答:這是由于 MySQL 默認(rèn)開啟了自動(dòng)補(bǔ)全功能(輸入表名時(shí)可以使用 tab 自動(dòng)補(bǔ)全)。其實(shí)現(xiàn)是在連接數(shù)據(jù)庫多執(zhí)行一些操作:

1、執(zhí)行 show databases;
2、切到 db1 庫,執(zhí)行 show tables;
3、把這兩個(gè)命令的結(jié)果用于構(gòu)建一個(gè)本地的哈希表。(最耗時(shí))

這個(gè)功能可以在命令中加上 -A 關(guān)閉。同時(shí)使用 -quick 也可以關(guān)閉。但是使用 -quick 可能會(huì)使客戶端性能降低。這是為什么?這就要說到數(shù)據(jù)在服務(wù)器端與客戶端發(fā)送的流程了。

服務(wù)器線程執(zhí)行流程

客戶端首先與服務(wù)器端驗(yàn)證用戶名和密碼,通過后正式建立連接,然后客戶端發(fā)送請(qǐng)求,服務(wù)器端從線程池中取一個(gè)線程來處理。處理的過程:

1、獲取一行,寫到 net_buffer 中。這塊內(nèi)存的大小是由參數(shù) net_buffer_length 定義的,默認(rèn)是 16k。
2、重復(fù)獲取行,直到 net_buffer 寫滿,調(diào)用網(wǎng)絡(luò)接口發(fā)出去。
3、如果發(fā)送成功,就清空 net_buffer,然后繼續(xù)取下一行,并寫入 net_buffer。
4、如果發(fā)送函數(shù)返回 EAGAIN 或 WSAEWOULDBLOCK,就表示本地網(wǎng)絡(luò)棧(socket send buffer)寫滿了,進(jìn)入等待。直到網(wǎng)絡(luò)棧重新可寫,再繼續(xù)發(fā)送。

從上面的流程可以知道,如果一次要發(fā)送的數(shù)據(jù)量超過 socket send buffer 空間,那么就會(huì)拆分開來發(fā)送,并不會(huì)發(fā)生 " 內(nèi)存打爆 " 的情況。由此我們可以知道,MySQL 是邊讀邊發(fā)的。

1、如果請(qǐng)求返回的數(shù)據(jù)量很大,那么在等待返回的過程中使用 show processlist 查看 State 列的值就會(huì)為 " Sending to client",表示服務(wù)器端的網(wǎng)絡(luò)棧寫滿了。

這是因?yàn)?Sate 列值的變化是在查詢請(qǐng)求到達(dá)開始執(zhí)行就會(huì)變?yōu)?" Sending data ",如果網(wǎng)絡(luò)棧寫滿發(fā)就會(huì)切換為 " Sending to client ",表示 " 正在等待客戶端接收結(jié)果 "。" Sending data " 可能處于線程執(zhí)行過程中的任意階段,比如因?yàn)殒i而阻塞的場(chǎng)景。

2、如果 show processlist 的 State 列一直為 " Sending to Client ",那么可以

  1)查看這條SQL,判斷是否可以優(yōu)化,減少返回值。

  2)將 net_buffer_length 設(shè)的大一些,來避免或者減少發(fā)送阻塞的時(shí)間。

客戶端執(zhí)行流程

在開始客戶端會(huì)創(chuàng)建線程去連接服務(wù)器端,然后接收服務(wù)端返回的數(shù)據(jù),客戶端接收服務(wù)器端返回的數(shù)據(jù)有兩種方式:

1、本地緩存。在本地開一片內(nèi)存,先把結(jié)果存起來。如果用 API 開發(fā),對(duì)應(yīng)的就是 mysql_store_result 方法。建議在客戶端處理量大時(shí)使用本地緩存。可以使用 mysql -h$host -P$port -u$user -p$pwd -e "select * from db1.t" > $target_file 將返回的數(shù)據(jù)保存到指定文件。

2、不緩存,讀一個(gè)處理一個(gè)。如果用 API 開發(fā),對(duì)應(yīng)的就是 mysql_use_result 方法。

回到上面的問題,為什么使用 -quick 可能會(huì)導(dǎo)致客戶端性能下降?這是因?yàn)榭蛻舳四J(rèn)使用緩存來接收,所以在客戶端正在處理其他數(shù)據(jù)時(shí)就可以先進(jìn)行緩存,等到后面直接讀取緩存就可以了。而使用 quick 就會(huì)使客戶端接收不使用緩存,那么如果客戶端正在執(zhí)行其他操作這個(gè)數(shù)據(jù)就會(huì)被阻塞,并且服務(wù)器端對(duì)應(yīng)的線程也會(huì)因?yàn)闆]有收到客戶端的反饋而沒有中斷這次事務(wù),這次事務(wù)涉及到的資源鎖也沒有釋放,造成并發(fā)問題,影響效率。除此之外, quick 還有三個(gè)效果。

1、就是前面提到的,跳過表名自動(dòng)補(bǔ)全功能。
2、客戶端接收數(shù)據(jù)使用不緩存的方式。而 mysql_store_result 方法需要申請(qǐng)本地內(nèi)存來緩存查詢結(jié)果,如果查詢結(jié)果太大,會(huì)耗費(fèi)較多的本地內(nèi)存,可能會(huì)影響客戶端本地機(jī)器的性能;
3、不會(huì)把執(zhí)行命令記錄到本地的命令歷史文件。

以上就是詳解MySQL kill 指令的執(zhí)行原理的詳細(xì)內(nèi)容,更多關(guān)于MySQL kill 指令的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

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

標(biāo)簽:黑河 錦州 隨州 資陽 荊州 吉林 甘南 滄州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解MySQL kill 指令的執(zhí)行原理》,本文關(guān)鍵詞  詳解,MySQL,kill,指令,的,執(zhí)行,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解MySQL kill 指令的執(zhí)行原理》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解MySQL kill 指令的執(zhí)行原理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    调教+趴+乳夹+国产+精品| 国产精品一区免费在线观看| 亚洲午夜免费福利视频| 国产激情视频一区二区三区欧美| 99国产精品国产精品毛片| 欧洲一区在线观看| 亚洲人成精品久久久久| 午夜精品久久一牛影视| 91农村精品一区二区在线| 首页综合国产亚洲丝袜| 国产一区二区免费在线| 亚洲欧洲精品一区二区三区| 成人精品视频一区| 激情小说欧美图片| 亚洲v日本v欧美v久久精品| 亚洲国产日韩综合久久精品| 亚洲国产日韩a在线播放性色| 在线视频亚洲一区| 亚洲人成精品久久久久| 久久精品国产在热久久| 精品国产免费人成电影在线观看四季 | 亚洲高清免费一级二级三级| 欧美一区二区视频免费观看| 成人久久视频在线观看| 日韩一区二区三区av| av一二三不卡影片| 日韩欧美一二三四区| 日本vs亚洲vs韩国一区三区二区| 久久久影视传媒| 亚洲成人一区二区| 国产99久久久国产精品潘金网站| 久久久www免费人成精品| 亚洲成va人在线观看| 国内成人自拍视频| 波多野结衣中文一区| 99v久久综合狠狠综合久久| 麻豆国产一区二区| 久久国产麻豆精品| 波多野结衣亚洲一区| 激情av综合网| 欧美日韩一区二区三区高清 | 精品国产乱码久久久久久夜甘婷婷| 欧美国产在线观看| 日韩欧美专区在线| 亚洲美女一区二区三区| 亚洲欧美成aⅴ人在线观看| 久久精品亚洲精品国产欧美| 久久精品人人爽人人爽| 久久精品一区蜜桃臀影院| 日本丶国产丶欧美色综合| 欧美视频一区二区在线观看| 日韩写真欧美这视频| 欧美一区二区三区的| 日韩电影一二三区| 国产精品一区三区| 91丨九色丨黑人外教| 4hu四虎永久在线影院成人| 在线国产亚洲欧美| 97久久超碰国产精品| 91精品国产91久久久久久最新毛片 | 成人的网站免费观看| 免费观看成人av| 欧美午夜精品一区二区三区| av电影一区二区| 久久国产精品免费| 久久国产精品99久久久久久老狼| 亚洲综合视频在线观看| 日本美女视频一区二区| 久久网这里都是精品| 欧美精品久久一区| 国产精品色哟哟| 亚洲国产精品精华液ab| 国产精品伦理在线| 日韩无一区二区| 久久成人综合网| 色八戒一区二区三区| 奇米精品一区二区三区在线观看 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产美女av一区二区三区| 久久久高清一区二区三区| 亚洲成人久久影院| 亚洲欧洲精品天堂一级| 麻豆国产精品777777在线| 色综合天天在线| 欧美精品一区二区三区蜜臀 | 91精品久久久久久久91蜜桃| 日韩精品一区在线| 国产欧美一区二区精品久导航 | 色综合天天综合色综合av| 9i在线看片成人免费| 国产偷国产偷精品高清尤物| 国产一区二区91| 国产日产欧美一区| 成人在线视频首页| 日本午夜一本久久久综合| 蜜臀av性久久久久蜜臀av麻豆| 日韩精品一区二区三区四区| 日本久久电影网| 久久av老司机精品网站导航| 在线观看区一区二| 欧美色老头old∨ideo| 亚洲精品在线观看网站| 欧美日韩国产首页| 亚洲综合久久久久| 日韩欧美精品三级| 久久99精品网久久| 欧美日韩一二区| 国产一区二区久久| 在线视频国产一区| 在线观看一区二区精品视频| 男男成人高潮片免费网站| 一区二区三区日韩| 欧美一区二区三区喷汁尤物| 中文字幕高清一区| 极品美女销魂一区二区三区 | 亚洲理论在线观看| 91在线视频免费91| 欧美激情一区二区三区不卡| 日本精品裸体写真集在线观看| 国产夜色精品一区二区av| 日韩av高清在线观看| 国产精品色在线| 欧美日韩视频在线一区二区| 国产亚洲成av人在线观看导航| 亚洲 欧美综合在线网络| 欧美成人午夜电影| 久久精品男人天堂av| 高清成人在线观看| 色哟哟精品一区| 亚洲成人精品影院| 成人综合在线观看| 日韩精品一区二区三区中文不卡 | 日韩午夜av电影| 国产在线精品国自产拍免费| 亚洲国产精品高清| 7777精品久久久大香线蕉| 国产一区二区美女诱惑| 国产日产欧产精品推荐色 | 亚洲自拍偷拍欧美| 男女男精品视频| 久久精品久久精品| 精品福利av导航| 在线中文字幕一区二区| 欧美影片第一页| 亚洲女同一区二区| 欧美婷婷六月丁香综合色| 亚洲成人av在线电影| 中文成人av在线| 欧美二区三区91| 中文字幕一区二区三区不卡| 欧美偷拍一区二区| 国产欧美综合在线| 亚洲视频在线观看三级| 国产成人免费视频| 1区2区3区国产精品| 91热门视频在线观看| 国产一区二区看久久| 亚洲视频一区二区在线观看| 久久久久国产免费免费| 黄色资源网久久资源365| 欧美网站大全在线观看| 粉嫩一区二区三区性色av| 精品久久久久久久久久久久久久久久久 | 91精品国产色综合久久久蜜香臀| 亚洲天堂精品在线观看| 成人一级视频在线观看| 99久久精品国产麻豆演员表| 欧美少妇一区二区| 免费视频一区二区| 欧美日韩五月天| 欧美日韩综合一区| 精品日产卡一卡二卡麻豆| 欧美日韩午夜影院| 色噜噜狠狠成人中文综合| 欧美日韩中文字幕一区| 麻豆精品国产91久久久久久| 国产精品久久毛片a| 欧美日韩一区二区三区免费看| 视频一区免费在线观看| 久久久噜噜噜久久中文字幕色伊伊| 亚洲va欧美va国产va天堂影院| 欧美一级久久久久久久大片| 一区二区三区欧美久久| 亚洲色图在线看| 国产成人av电影在线观看| 国模套图日韩精品一区二区| 国产精品乱人伦中文| 韩国女主播成人在线观看| 国产伦精一区二区三区| 欧美经典一区二区三区| 欧美日韩国产天堂| 亚洲成av人在线观看| 欧美麻豆精品久久久久久| 91丨porny丨首页| 欧美日韩视频在线第一区| 欧美三区在线视频| 久久久不卡网国产精品一区| 欧美日韩免费在线视频| 欧美一区二区三区不卡| 欧美日韩另类一区|