背景

mysql 出现 ERROR 1205: Lock wait timeout exceeded
说明有另外一个事务锁定了记录,该如何排查是哪个事务呢?

过程

  1. INNODB_LOCK_WAITS 表
    再次执行SQL,让其试图获取锁。

    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

    可以看出本次SQL的锁等待信息,拿到 blocking_lock_id,即是当前正在占用的lock_id, blocking_trx_id即是对应的事务

  2. INNODB_LOCK 表

    SELECT * FROM information_schema.INNODB_LOCK;

    可以查出详细的锁信息

  3. INNODB_TRX 表

    SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX where trx_id = "xxx";

    可以查出详细的事务信息,trx_mysql_thread_id即是对应的线程ID

  4. PROCESSLIST 表

    select * from information_schema.`PROCESSLIST` where ID = "xxx"

    可以查到线程的详细信息,可以通过 kill xxx来终止进程从而强行释放锁


d.m.o.h.strive
1 声望0 粉丝

书山有路勤为径,学海无涯苦作舟