乐趣区

关于mysql:mysql锁等待超时排查

背景

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来终止过程从而强行开释锁

退出移动版