mysql查询killed状态的进程(MySQL kill指令使用指南)
mysql查询killed状态的进程
MySQL kill指令使用指南
|
KILL [ CONNECTION | QUERY] processlist_id |
在Mysql中每个连接都是单独线程运行,可以使用语句 KILL processlist_id statement.来终止语句执行。
KILL允许可选 CONNECTION或QUERY 修饰符:
- KILL CONNECTION ,KILL与无修饰符相同 :终止与给定关联的连接 processlist_id,在终止该连接正在执行的任何语句之后。
- KILL QUERY终止连接当前正在执行的语句,但保持连接本身不变。
使用show processlist 查看所有id
Kill 指令使用
如果我们应用执行SQL后,由于锁select for update或者数量太大,导致执行SQL卡在数据库,此时想取消该SQL怎么办?可以通过kill命令停止mysql线程或者是取消该SQL执行,此处需要到底是执行 kill threadId指令还是 kill query theadId指令?
kill与kill query 最大区别是是否取消该连接上执行的所有sql,即是否关闭该线程,如果关闭该线程即对应JDBC中statement关闭
|
-- 数据库锁住acctno=13记录 然后执行如下更新语句 update test set acctname = '12' where acctno=13 |
show processlist查看正在执行sql的线程id
如果想取消该SQL执行,可以使用命令 kill query 407 取消SQL执行,执行后407线程并不会消失,如果该连接上有SQL执行会继续执行;但是如果使用kill 407 ,407线程会消失。使用时需要注意二者差异。
线程id除了通过show processlist查看,也可以使用编程的方式获取threadId
|
Connection connection = getConnection(); ((MysqlConnection)connection).getSession().getThreadId(); |
Statement cancel方法
我们使用JDBC编程方式对数据库进行操作时,可以也可以使用Statement对象的cancel方法进行取消,Mysql驱动内部也是发送Kill query threadId 指令,Mysql驱动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() { } }); //驱动内部使用 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()); } } |
客户端工具执行
客户端工具执行SQL后取消执行,有些工具发 kill 命令 有些发kill query 指令,可以通过抓包工具验证下Navicat工具发送什么指令,抓包工具推荐Wireshark,很强大。
是kill 指令,对应的线程ID为407,也有部分工具是发送的kill query指令。
以上就是MySQL kill指令使用指南的详细内容,更多关于MySQL kill指令的资料请关注开心学习网其它相关文章!
原文链接:https://juejin.cn/post/6910870242122661896
- dockermysql实例(docker 连接宿主Mysql操作)
- visual studio怎么连接数据库(使用Visual Studio Code连接MySql数据库并进行查询)
- 如何安装phpmysql环境(phpnow重新安装mysql数据库的方法)
- mysql经典问题(MySQL null的一些易错点)
- mysqlreplace用法(细说mysql replace into用法)
- mysql数据字段默认值怎么设置(MySQL 字段默认值该如何设置)
- mysql中如何设置多个主键(Mysql 增加主键或者修改主键的sql语句操作)
- mysql有哪些约束(MySQL完整性约束的定义与实例教程)
- mysql数据库怎么换行(MySQL数据中很多换行符和回车符的解决方法)
- 用mysql语句写python学生管理系统(Python基于mysql实现学生管理系统)
- oraclemysql知识点(详解Mysql和Oracle之间的误区)
- MySql DATE_FORMAT日期格式化
- mysql锁技术(MySQL 加锁控制并发的方法)
- 查询按照部门分组的mysql语句(Mysql根据某层部门ID查询所有下级多层子部门的示例)
- mysql表锁行锁和分页锁(MySQL 不停机不锁表主从搭建)
- mysql删除表数据的语句(Mysql实现定时清空一张表的旧数据并保留几条数据推荐)
- 一窗通办政务服务小品剧本(一窗通办政务服务小品剧本)
- 刘韬涛丁子贺小品《根治低头族》台词剧本(刘韬涛丁子贺小品根治低头族台词剧本)
- 看完《夺冠》,黄渤的演技我实在夸不起来,彭昱畅反令人惊喜(黄渤的演技我实在夸不起来)
- 黄渤泪目 我的痴呆父亲,我内心永远的痛(黄渤泪目我的痴呆父亲)
- 蒜苔和鱿鱼尾巴一起炒,味道特别棒,又脆又嫩,有滋又有味(蒜苔和鱿鱼尾巴一起炒)
- 鱿鱼炒蒜苔不是黑暗料理,这样做清香扑鼻,鲜美脆嫩,开胃又下饭(鱿鱼炒蒜苔不是黑暗料理)
热门推荐
- python3循环使用教程(Python3.4学习笔记之 idle 清屏扩展插件用法分析)
- python中比较同一字典value(在Python 字典中一键对应多个值的实例)
- 云空间无法连接服务器(怎样测试云服务器)
- jquery留言板代码(JavaScript实现留言板添加删除留言)
- apache和php如何配置(Apache2与PHP5 for WinXP简单配置技巧)
- sql server 动态建表(SQL Server如何通过创建临时表遍历更新数据详解)
- django操作默认数据库(Django数据库类库MySQLdb使用详解)
- nginx故障处理(详解Nginx启动失败的几种错误处理)
- 香港云服务器(香港云服务器的优势是什么?)
- antdesignpro引入依赖如何使用(在Ant Design Pro登录功能中集成图形验证码组件的方法步骤)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9