如何找哪些连接出长时间持有着某个锁?

本文介绍如何使用SHOW PROCESSLIST命令查看MySQL中等待锁的进程,并利用mysqladmin工具获取更详细的锁信息,包括锁定表的线程ID及锁类型,帮助解决锁冲突问题。

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

由此我们知道,通过SHOW PROCESSLIST\G;命令可以查看到在等待锁的进程,但是看不出持有着锁的进程(是哪个进程总是占用着锁呢,杀掉!!)

当然这不是通过SQL语句来杀掉的,需要在系统服务器上执行mysqladmin辅助功能来运行命令,它能将锁的信息打印到服务器的错误日志里。
$ mysqladmin debug
执行这个命令会输出大量的调试信息内容,在末尾地方会看到这样的信息(如果:在一个连接里锁定了表,再另一个连接里再去锁定这个表),

这里会看到线程8正等待着线程7持有的锁。如果MYSQL是在调试开启状态下编译出来的,还将输出更多信息。



如果是windows操作系统的话,CMD下CD到MYSQL安装目录,执行mysqladmin命令(可能要用户名和密码-u -p)
此时可能什么也没有,不要担心,然后我们再进MYSQL(-u-p)执行命令:

mysql> SHOW VARIABLES LIKE 'log_error';
+---------------+-----------------------------------+
| Variable_name | Value |
+---------------+-----------------------------------+
| log_error | D:\MySQL\Data\PC2010121412fsc.err |
+---------------+-----------------------------------+


通过这个路径,我们找到该文件并打开,在最后几行中我们看到这个信息

Table status:
Opened tables: 47
Open tables: 2
Open files: 0
Open streams: 0

Alarm status:
Active alarms: 0
Max used alarms: 0
Next alarm time: 0

Thread database.table_name Locked/Waiting Lock_type

22 testjoin.feedback Waiting - read Low priority read lock
30 testjoin.feedback Locked - write High priority write lock





Begin safemalloc memory dump:

End safemalloc memory dump.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值