如果看到有许多进程都处于Locked状态,可能是MyISAM用于高并发的工作负载上了。如何找出
有哪几个连接长时间地持有着某个锁呢?
没有SQL命令可以用来显示那些持有着表锁从而阻塞了你查询的线程,使用SHOW PROCESSLIST,可以看到
在等待锁的进程,但是看不到持有着锁的进程。
以下命令能将锁的信息打印到服务器的错误日志里.
$ mysqladmin debug
找出mysql配置文件的位置
whereis my.cnf
找到mysql错误日志的位置
cat /etc/my.cnf
--->
[mysqld_safe]
log-error=/var/log/mysqld.log
在错误日志中输出大量的调试信息,在接近末尾的地方,可以看到类似下面的信息:
Thread database.table_name Locked/Waiting Lock_type
7 sakila.film Locked - read Read lock without concurrent inserts
8 sakila.film Waiting - write Highest priority write lock
此时,你能看到8正在等待着线程7持有的锁