MySQL 死锁查询命令

1 查询是否锁表

show OPEN TABLES where In_use > 0;

2 查看正在持有锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 

3 查看等待锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 

4 查询进程状态

show processlist;
  1. 查看未提交事务
select trx_state, trx_started, trx_mysql_thread_id, trx_query 
from information_schema.innodb_trx;

trx_state – 事务状态,一般为 RUNNING
trx_started – 事务执行的起始时间,若时间较长,则要分析该事务是否合理
trx_mysql_thread_id – MySQL 的线程ID
trx_query – 事务中的sql

  1. 调整锁超时
    lock_wait_timeout 表示获取metadata lock的超时 默认值为31536000(秒)
set session lock_wait_timeout = 1800;
set global lock_wait_timeout = 1800;
  1. Waiting for table metadata lock
    在进行一些 alter table 等DDL操作时,如果该表上有未提交的事务则会出现,一般只要 kill 掉相关线程

Tags:,

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注