mysql 查询被阻塞_查找MySQL查询语句被阻塞阻塞原因

查询长时间不返回,一般碰到这种情况的话,大概率是表t被锁住了。接下来分析原因的时候,一般都是首先执行一下show processlist命令,看看当前语句处于什么状态。

然后我们再针对每种状态,去分析它们产生的原因、如何复现,以及如何处理。

首先执行一下show processlist命令,看看当前语句处于什么状态。

mysql> show processlist;

等MDL锁

show processlist命令查看State列显示为Waiting for table metadata lock。

mysql 查询被阻塞_查找MySQL查询语句被阻塞阻塞原因_第1张图片

出现这个状态表示的是,现在有一个线程正在表t上请求或者持有MDL写锁,把select语句堵住了。

但是,由于在show processlist的结果里面,session A的Command列是“Sleep”,导致查找起来很不方便。不过有了performance_schema和sys系统库以后,就方便多了。(MySQL启动时需要设置performance_schema=on,相比于设置为off会有10%左右的性能损失)

通过查询sys.schema_table_lock_waits这张表,我们就可以直接找出造成阻塞的process id,把这个连接用kill 命令断开即可。

mysql> select blocking_pid from sys.schema_table_lock_waits;<

你可能感兴趣的:(mysql,查询被阻塞)