MySQL 快速找到 锁表 以及正在锁表的SQL的方法

information_schema 相关SQL


SELECT
 t3.Id --  (PROCESSLIST_ID): 线程的唯一标识符
,t3.User -- 执行查询的MySQL用户名
,t3.Host -- 发起查询的客户端主机名或IP地址
,t3.db -- 当前线程正在操作的数据库名称,如果有的话
,t3.Command --  线程当前的状态,如Sleep, Query, Connect, Fetch等
,t3.Time -- TIME_MS (TIME_MS): 线程处于当前状态的时间长度。在较新的MySQL版本中,TIME_MS以毫秒为单位提供更精确的时间
,t3.State -- 提供关于线程当前更具体状态的额外信息,比如Waiting for table metadata lock
,t3.Info -- 正在执行的SQL语句的一部分。如果是长查询,可能会被截断。使用SHOW FULL PROCESSLIST;可以获取完整的查询语句。
,t1.trx_query -- 正在执行的事务中的SQL语句文本,这对于诊断问题特别有用,因为它直接展示了导致事务行为的SQL代码。
,t1.trx_id --  InnoDB内部生成的事务唯一ID,对于只读事务或未申请锁的事务,不会分配此ID
,t1.trx_state -- 事务的状态,常见的值有RUNNING(事务正在执行)、LOCK WAIT(事务在等待锁)等
,t1.trx_started -- 事务开始的时间戳,帮助判断事务运行的时长。
,t1.trx_requested_lock_id -- 如果事务处于锁等待状态,此字段标识它正在等待的锁的ID。
,t1.trx_wait_started -- 如果事务在等待锁,记录等待开始的时间
,t1.trx_mysql_thread_id -- MySQL线程ID,与执行事务的客户端线程相关联
,t2.requesting_trx_id -- 请求锁但被阻塞的事务ID。这是等待事务的唯一标识
,t2.requested_lock_id -- 请求的锁的 ID 
,t2.blocking_trx_id --  阻塞其他事务的事务 ID
,t2.blocking_lock_id -- 阻塞其他事务的锁的 ID
FROM information_schema.INNODB_TRX t1  
join information_schema.INNODB_LOCK_WAITS t2 on t1.trx_id = t2.blocking_trx_id 
join information_schema.PROCESSLIST t3 on t1.trx_mysql_thread_id = t3.id  

快速解决死锁的办法: 找到死锁的 thread id

kill Id

附录:

-- SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;  -- 查看等待锁的事务
-- SELECT * FROM information_schema.INNODB_TRX  -- 查看正在进行中的事务
-- SELECT * FROM information_schema.INNODB_LOCKS -- 查看正在锁的事务

-- show full PROCESSLIST; 等价于以下SQL:
select * from information_schema.PROCESSLIST


查询是否锁表
SHOW OPEN TABLES where In_use > 0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安得权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值