在 MySQL 中,使用以下命令可以查看当前被锁的进程:
SHOW ENGINE INNODB STATUS;
执行此命令后,会返回一个包含详细信息的状态报告。其中一个名为“TRANSACTIONS”的部分会显示所有当前正在执行的事务,以及它们的状态、持有的锁等信息。
------------ TRANSACTIONS ------------ Trx id counter 1111857678 Purge done for trx's n:o
1111857678 undo n:o 0 state: running Isolation level: READ COMMITTED ...
在上面的示例中,可以看到当前有一个事务正在执行,并保持着读提交隔离级别。可以继续查看事务的详细信息,以确定哪些进程被锁定了。
... ---TRANSACTION 1111856978, ACTIVE 15 sec mysql tables in use 1, locked 1 LOCK WAIT 2 lock struct(s), heap size 360, 1 row lock(s),
undo log entries 1 MySQL thread id 260, OS thread handle 1234567890, query id 12345
localhost
127.0.0.1 mydatabase Updating UPDATE mytable SET column1='value1' WHERE id=1 ------- TRX HAS BEEN WAITING 15 SEC FOR THIS LOCK TO BE GRANTED: RECORD LOCKS space id 219 page no 4 n bits 72
index PRIMARY of table `mydatabase`.`mytable`
trx id 1111856978 lock_mode X
lock
wait 15 row lock(s)
在上面的示例中,可以看到一个事务正在等待另一个事务释放对同一行数据的锁定。这可以通过终止当前正在等待的事务,或者等待其完成来解决。
总之,了解如何查看被锁定的进程是解决 MySQL 中进程锁定问题的关键。通过执行 SHOW ENGINE INNODB STATUS 命令,可以非常容易地查看并解决这个问题。