久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL kill指令使用指南

瀏覽:3日期:2023-10-07 12:48:40

KILL [CONNECTION | QUERY] processlist_id

在Mysql中每個(gè)連接都是單獨(dú)線程運(yùn)行,可以使用語句 KILL processlist_id statement.來終止語句執(zhí)行。

KILL允許可選 CONNECTION或QUERY 修飾符:

KILL CONNECTION ,KILL與無修飾符相同 :終止與給定關(guān)聯(lián)的連接 processlist_id,在終止該連接正在執(zhí)行的任何語句之后。 KILL QUERY終止連接當(dāng)前正在執(zhí)行的語句,但保持連接本身不變。

使用show processlist 查看所有id

MySQL kill指令使用指南

Kill 指令使用

如果我們應(yīng)用執(zhí)行SQL后,由于鎖select for update或者數(shù)量太大,導(dǎo)致執(zhí)行SQL卡在數(shù)據(jù)庫,此時(shí)想取消該SQL怎么辦?可以通過kill命令停止mysql線程或者是取消該SQL執(zhí)行,此處需要到底是執(zhí)行 kill threadId指令還是 kill query theadId指令?

kill與kill query 最大區(qū)別是是否取消該連接上執(zhí)行的所有sql,即是否關(guān)閉該線程,如果關(guān)閉該線程即對應(yīng)JDBC中statement關(guān)閉

-- 數(shù)據(jù)庫鎖住acctno=13記錄 然后執(zhí)行如下更新語句update test set acctname =’12’ where acctno=13

show processlist查看正在執(zhí)行sql的線程id

MySQL kill指令使用指南

如果想取消該SQL執(zhí)行,可以使用命令 kill query 407 取消SQL執(zhí)行,執(zhí)行后407線程并不會(huì)消失,如果該連接上有SQL執(zhí)行會(huì)繼續(xù)執(zhí)行;但是如果使用kill 407 ,407線程會(huì)消失。使用時(shí)需要注意二者差異。

線程id除了通過show processlist查看,也可以使用編程的方式獲取threadId

Connection connection = getConnection(); ((MysqlConnection)connection).getSession().getThreadId();Statement cancel方法

我們使用JDBC編程方式對數(shù)據(jù)庫進(jìn)行操作時(shí),可以也可以使用Statement對象的cancel方法進(jìn)行取消,Mysql驅(qū)動(dòng)內(nèi)部也是發(fā)送Kill query threadId 指令,Mysql驅(qū)動(dòng)cancel方法源碼

public void cancel() throws SQLException { try { if (this.query.getStatementExecuting().get()) {if (!this.isClosed && this.connection != null) { JdbcConnection cancelConn = null; Object cancelStmt = null; try { HostInfo hostInfo = this.session.getHostInfo(); String database = hostInfo.getDatabase(); String user = StringUtils.isNullOrEmpty(hostInfo.getUser()) ? '' : hostInfo.getUser(); String password = StringUtils.isNullOrEmpty(hostInfo.getPassword()) ? '' : hostInfo.getPassword(); NativeSession newSession = new NativeSession(this.session.getHostInfo(), this.session.getPropertySet()); newSession.connect(hostInfo, user, password, database, 30000, new TransactionEventHandler() { public void transactionCompleted() { } public void transactionBegun() { } }); //驅(qū)動(dòng)內(nèi)部使用 KILL QUERY + threadId 指令取消 newSession.sendCommand((new NativeMessageBuilder()).buildComQuery(newSession.getSharedSendPacket(), 'KILL QUERY ' + this.session.getThreadId()), false, 0); this.setCancelStatus(CancelStatus.CANCELED_BY_USER); } catch (IOException var13) { throw SQLExceptionsMapping.translateException(var13, this.exceptionInterceptor); } finally { if (cancelStmt != null) { ((Statement)cancelStmt).close(); } if (cancelConn != null) { ((JdbcConnection)cancelConn).close(); } }} } } catch (CJException var15) { throw SQLExceptionsMapping.translateException(var15, this.getExceptionInterceptor()); } }客戶端工具執(zhí)行

客戶端工具執(zhí)行SQL后取消執(zhí)行,有些工具發(fā) kill 命令 有些發(fā)kill query 指令,可以通過抓包工具驗(yàn)證下Navicat工具發(fā)送什么指令,抓包工具推薦Wireshark,很強(qiáng)大。

MySQL kill指令使用指南

是kill 指令,對應(yīng)的線程ID為407,也有部分工具是發(fā)送的kill query指令。

以上就是MySQL kill指令使用指南的詳細(xì)內(nèi)容,更多關(guān)于MySQL kill指令的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 昆山市| 昌都县| 汤阴县| 四子王旗| 浙江省| 抚州市| 邹城市| 峨眉山市| 焦作市| 武川县| 毕节市| 枣阳市| 津南区| 长武县| 罗定市| 砚山县| 玉田县| 玉树县| 溧阳市| 江北区| 吉木萨尔县| 囊谦县| 高陵县| 明光市| 通城县| 海阳市| 海晏县| 贺兰县| 阿克苏市| 福泉市| 西吉县| 长葛市| 平阴县| 温州市| 科尔| 镇平县| 陇西县| 秭归县| 正蓝旗| 皋兰县| 阳信县|