mysql使用kill命令解决死锁问题,杀死某条正在执行的sql语句

http://www.360sdn.com/mysql/2013/0815/823.html

在使用mysql运行某些语句时,会因数据量太大而导致死锁,没有反映。这个时候,就需要kill掉某个正在消耗资源的query语句即可, KILL命令的语法格式如下:

KILL [CONNECTION | QUERY] thread_id

每个与mysqld的连接都在一个独立的线程里运行,您可以使用SHOW PROCESSLIST语句查看哪些线程正在运行,并使用KILL thread_id语句终止一个线程。

KILL允许自选的CONNECTION或QUERY修改符:KILL CONNECTION与不含修改符的KILL一样:它会终止与给定的thread_id有关的连接。KILL QUERY会终止连接当前正在执行的语句,但是会保持连接的原状。

如果您拥有PROCESS权限,则您可以查看所有线程。如果您拥有超级管理员权限,您可以终止所有线程和语句。否则,您只能查看和终止您自己的线程和语句。您也可以使用mysqladmin processlist和mysqladmin kill命令来检查和终止线程。

首先登录mysql,然后使用: show processlist; 查看当前mysql中各个线程状态。

mysql> show processlist;
+------+------+----------------------+----------------+---------+-------+-----------+--------------------- 
| Id   | User | Host                 | db             | Command | Time  | State     | Info
+------+------+----------------------+----------------+---------+-------+-----------+--------------------- 
| 7028 | root | ucap-devgroup:53396  | platform       | Sleep   | 19553 |           | NULL 
| 8352 | root | ucap-devgroup:54794  | platform       | Sleep   |  4245 |           | NULL
| 8353 | root | ucap-devgroup:54795  | platform       | Sleep   |     3 |           | NULL
| 8358 | root | ucap-devgroup:62605  | platform       | query   |  4156 | updating  | update t_shop set  |

以上显示出当前正在执行的sql语句列表,找到消耗资源最大的那条语句对应的id.

然后运行kill命令,命令格式如下:

 	kill id;
 -- 示例:
  kill 8358

杀掉即可。

MYSQL出现WAITING FOR TABLE METADATA LOCK的原因和解决方案:

使用管理员权限登录mysql数据库查看未提交的事务:select * from information_schema.innodb_trx 

或者select * from information_schema.innodb_trx\G;【纵向查看】

其中字段解释如下:

  • trx_state: 事务状态,一般为RUNNING
  • trx_started: 事务执行的起始时间,若时间较长,则要分析该事务是否合理
  • trx_mysql_thread_id: MySQL的线程ID,用于kill
  • trx_query: 事务中的sql

kill 掉线程ID,问题解决。

其他参考办法:http://www.cnblogs.com/digdeep/p/4892953.html

 

 

 

 

 

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中,kill命令用于终止正在执行的查询语句或关闭一个客户端连接。使用kill命令可以解决死锁问题或者终止占用过多资源的查询。 当执行"kill query thread_id_B"命令时,MySQL会将session B的运行状态改为THD::KILL_QUERY,并向session B的执行线程发送一个信号。这样可以强制终止正在执行的查询语句。 在有些情况下,执行kill命令后,通过show processlist命令查看时,会发现被kill的查询语句的Command列显示为Killed。这表示该查询语句已被成功终止。但有时仍然可以在processlist中看到该线程的存在,这是因为MySQL在终止查询语句后,可能需要一些时间来清理相关资源并释放连接。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Mysql使用kill命令解决死锁问题(杀死某条正在执行sql语句)](https://download.csdn.net/download/weixin_38738983/12827191)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Day896.MySqlkill命令 -MySQL实战](https://blog.csdn.net/qq_43284469/article/details/129149998)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值