mysql查询因为索引导致表阻塞或死锁

本文讲述生产环境中对表进行select查询导致阻塞死锁的解决思路。执行select操作时创建索引、查询复杂耗时过长会引发问题。通过SHOW PROCESSLIST指令发现线程处于LOCK状态,可调用KILL指令杀进程。但根本要解决SQL复杂度高、索引缺失问题,可拆分SQL、转移逻辑并添加索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在生产上对表进行select查询,导致阻塞死锁,解决思路

执行

show PROCESSLIST;

或者以下sql

select * from information_schema.processlist;

上述指令是用来查看那些线程正在运行,你也可以得到这些信息,从INFORMATION_SCHEMA PROCESSLIST这个表,或者通过mysqladmin processlist指令。如果你有PROCESS权限,你可以查看所有的线程。否则,你只能查看你自己当前账户的线程。如果你没有使用FULL关键字,你只能查看每个记录中Info字段里面的前100个字符。(转载自别人说明)

 

我们线上的问题是执行select操作时,创建索引所以导致死锁,还有select太复杂查询时间过长导致阻塞

通过SHOW PROCESSLIST指令,发现有好多线程Command处于LOCK状态。最长的Time字段显示达到33772seconds,导致系统应用卡顿情况严重,

为了解决问题,在mysql立即调用KILL指令,杀掉进程

说明:connection选项,kill的时候,将连接也断掉,而query选项,kill的过程只是将该指令杀掉,连接还保持。 kill指令不指定connection或者query选项时,默认是connection。

这只是解决系统卡顿问题,源头还是sql本身问题,复杂度高,所查询的字段基本没走索引,最后是通过把sql拆分,并且把逻辑转移到程序层面,而不是在数据库操作,并且把查询频率高的字段添加索引,

参考(https://www.cnblogs.com/shihuc/p/8733460.html

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值