如何查看锁等待信息_mysql锁日志排查

发布时间 - 2026-01-14 00:00:00    点击率:
最直接查锁等待关系是查询INFORMATION_SCHEMA.INNODB_LOCK_WAITS表,获取requesting_trx_id和blocking_trx_id,再关联INNODB_TRX查具体SQL;MySQL 8.0起应改用performance_schema.data_lock_waits和data_locks;死锁详情通过SHOW ENGINE INNODB STATUS\G查看,长期捕获需启用innodb_print_all_deadlocks=ON并查错误日志。

查当前锁等待关系

最直接的方式是查 INFORMATION_SCHEMA.INNODB_LOCK_WAITS 表,它明确记录了谁在等谁:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
结果里有两个关键字段:requesting_trx_id(等待方事务 ID)和 blocking_trx_id(阻塞方事务 ID)。
再关联 INNODB_TRX 表就能看到具体 SQL 和事务状态:
SELECT trx_id, trx_state, trx_started, trx_mysql_thread_id, trx_query
FROM INFORMATION_SCHEMA.INNODB_TRX
WHERE trx_id IN (SELECT blocking_trx_id FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS);

MySQL 8.0 推荐用 performance_schema

INNODB_LOCKS 表已在 8.0 中移除,建议改用 performance_schema.data_lock_waitsdata_locks
- 查所有锁:SELECT OBJECT_NAME, LOCK_TYPE, LOCK_MODE, OWNER_THREAD_ID FROM performance_schema.data_locks WHERE OBJECT_SCHEMA = 'your_db';
- 查锁等待链:
SELECT r.OBJECT_NAME AS table_name,
r.LOCK_MODE AS requested_mode,
b.LOCK_MODE AS blocking_mode,
r.OWNER_THREAD_ID AS waiting_thread,
b.OWNER_THREAD_ID AS blocking_thread
FROM performance_schema.data_lock_waits w
JOIN performance_schema.data_locks r ON w.REQUESTING_ENGINE_LOCK_ID = r.ENGINE_LOCK_ID
JOIN performance_schema.data_locks b ON w.BLOCKING_ENGINE_LOCK_ID = b.ENGINE_LOCK_ID;

看最近一次死锁详情

执行命令:
SHOW ENGINE INNODB STATUS\G
输出中重点关注 LATEST DETECTED DEADLOCK 区块,里面包含:
- 涉及的两个事务 ID 和活跃时间
- 各自持有的锁(HOLDS THE LOCK(S))
- 各自等待的锁(WAITING FOR THIS LOCK TO BE GRANTED)
- 触发死锁的具体 SQL 语句
注意:该命令只保留最近一次死锁,不能回溯历史。

开启并查看死锁日志

要长期捕获死锁,需启用参数:
SET GLOBAL innodb_print_all_deadlocks = ON;
(无需重启,但仅对后续死锁生效)
死锁信息会写入 MySQL 错误日志,路径可通过以下命令确认:
SHOW VARIABLES LIKE 'log_error';
常见路径如 /var/log/mysql/error.log,用 grep 快速定位:
grep -A 20 "LATEST DETECTED DEADLOCK" /var/log/mysql/error.log


# mysql  # ai  # 有锁  # sql  # for  # select  # Error  # var  # this  # 死锁  # 就能  # 已在  # 可通过  # 重启  # 谁在  # 移除  # 重点关注  # 仅对  # 有两个 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: JavaScript数据类型有哪些_如何准确判断一个变量的类型  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  如何用已有域名快速搭建网站?  浅谈Javascript中的Label语句  制作旅游网站html,怎样注册旅游网站?  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  android nfc常用标签读取总结  怎么用AI帮你为初创公司进行市场定位分析?  利用python获取某年中每个月的第一天和最后一天  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  公司网站制作需要多少钱,找人做公司网站需要多少钱?  高防服务器租用指南:配置选择与快速部署攻略  微信小程序制作网站有哪些,微信小程序需要做网站吗?  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  网页设计与网站制作内容,怎样注册网站?  Swift中循环语句中的转移语句 break 和 continue  怎么用AI帮你设计一套个性化的手机App图标?  Laravel如何使用withoutEvents方法临时禁用模型事件  如何续费美橙建站之星域名及服务?  JS经典正则表达式笔试题汇总  如何在橙子建站中快速调整背景颜色?  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  Swift中swift中的switch 语句  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  UC浏览器如何设置启动页 UC浏览器启动页设置方法  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  bing浏览器学术搜索入口_bing学术文献检索地址  JavaScript实现Fly Bird小游戏  使用C语言编写圣诞表白程序  郑州企业网站制作公司,郑州招聘网站有哪些?  node.js报错:Cannot find module 'ejs'的解决办法  网站制作免费,什么网站能看正片电影?  高端建站如何打造兼具美学与转化的品牌官网?  太平洋网站制作公司,网络用语太平洋是什么意思?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  如何确认建站备案号应放置的具体位置?  香港服务器选型指南:免备案配置与高效建站方案解析  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  如何在阿里云虚拟服务器快速搭建网站?  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  如何在 React 中条件性地遍历数组并渲染元素  C++时间戳转换成日期时间的步骤和示例代码  java获取注册ip实例  深圳网站制作平台,深圳市做网站好的公司有哪些?  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  Laravel如何生成API文档?(Swagger/OpenAPI教程)  在Oracle关闭情况下如何修改spfile的参数  如何在企业微信快速生成手机电脑官网?