这个时候应该怀疑读取都被加锁,应该尝试使用 show processlist 查看每一个正在运行的进程。
可以看到这样一个列表,里面有使用者即用户,正在使用数据库的 host, 使用的 db 目前的 command 运行情况,以及目前运行的时间。可以通过这些信息来排查目前正在使用对应表的是哪台机器上的应用来缩小排查范围。
当范围缩小到某台服务器之后,我们可以通过 host 之后所带上的端口号去目标机器上查询对应是什么应用程序在使用。例如:
我使用 netstat -apn | grep 端口号
获得正在使用的目标应用 pid
tcp 0 0 10.66.38.125:47592 10.50.158.121:3306 ESTABLISHED 14447/python2
14447 就是对应的 pid
然后我们使用 ps ef | grep pid 就可以得到具体的应用是啥,以及启动命令是什么。有了这些信息我们就可以排查是不是我们使用的应用锁住了表。