mysql锁等待时间过长怎么办_mysql锁问题排查
发布时间 - 2025-12-31 00:00:00 点击率:次MySQL锁等待时间过长本质是事务阻塞或资源争用,需快速定位“谁在等、谁在占、为什么占”:优先查performance_schema.data_lock_waits(8.0+),结合INNODB_TRX、INNODB_LOCK_WAITS和PROCESSLIST定位阻塞源与被阻塞SQL,再分析长事务、无索引扫描、间隙锁、热点行等根因,辅以KILL、超时设置、索引优化及开发规范治理。
MySQL锁等待时间过长,本质是事务阻塞或资源争用导致的,核心思路是:快速定位谁在等、谁在占、为什么占。
查当前锁等待和阻塞关系
优先执行以下语句,直观看到“谁在等谁”:
- SELECT * FROM performance_schema.data_lock_waits;(MySQL 8.0+,最直接)
- SELECT * FROM information_schema.INNODB_TRX; 查活跃事务(trx_state、trx_started、trx_mysql_thread_id)
- SELECT * FROM information_schema.INNODB_LOCKS;(5.7及以前可用,8.0已移除)
- SELECT * FROM information_schema.INNODB_LOCK_WAITS;(关联trx和lock,显示blocking_trx_id和blocked_trx_id)
重点看 blocking_trx_id 对应的事务是否长时间未提交、是否执行了大查询、是否处于sleep状态却没释放锁。
看被阻塞事务在做什么
拿到 blocked_trx_id 后,用线程ID查其SQL:
- SELECT * FROM information_schema.PROCESSLIST WHERE ID = ?;(查看state、info字段)
- 若 info 为空,可能是空闲连接;若 state 是 Updating / Sending data / Locked,结合执行时间判断是否卡住
- 对长时间运行的线程,可执行 SHOW ENGINE INNODB STATUS\G,在 TRANSACTIONS 部分找详细锁信息和最近SQL
分析锁的来源和优化方向
常见锁等待原因和对应动作:
-
长事务未提交:业务代码漏掉 commit/rollback,或事务内混入耗时操
作(如HTTP调用、文件读写)。→ 检查应用逻辑,加超时控制,避免在事务里做非DB操作 - 无索引导致全表扫描加锁:UPDATE/DELETE WHERE 条件列没走索引,会锁整张表或大量无关行。→ 用 EXPLAIN 确认执行计划,补上合适索引
- 间隙锁(Gap Lock)冲突:RR隔离级别下,范围条件 UPDATE 或唯一键重复插入易触发。→ 考虑是否真需RR,或改用RC(注意幻读风险)
- 高并发热点行更新:比如库存扣减、计数器累加。→ 改用乐观锁(version字段)、Redis预减、或拆分热点(如分段库存)
临时止血与长期预防
紧急情况下可 kill 掉阻塞源头:
- KILL [blocking_thread_id];(谨慎操作,确认不是关键业务事务)
- 设置事务超时:SET innodb_lock_wait_timeout = 10;(默认50秒,按业务容忍度调低)
- 监控常态化:用 pt-deadlock-logger 定期抓死锁;用 Prometheus + mysqld_exporter 监控 lock_wait_time、innodb_row_lock_waits
- 开发规范:所有事务明确 BEGIN/COMMIT 边界;禁止在事务中 sleep、调外部接口;DML 必须带 WHERE 且确保走索引
# mysql
# redis
# ssl
# ai
# 热点
# 为什么
# red
# sql
# select
# 接口
# 线程
# delete
# 并发
# http
# prometheus
# 谁在
# 长时间
# 死锁
# 做什么
# 执行时间
# 却没
# 一键
# 补上
# 可执行
# 整张
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现一对一模型关联?(Eloquent示例)
手机网站制作与建设方案,手机网站如何建设?
Laravel如何实现文件上传和存储?(本地与S3配置)
如何快速搭建安全的FTP站点?
Laravel怎么实现验证码(Captcha)功能
三星网站视频制作教程下载,三星w23网页如何全屏?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
如何在搬瓦工VPS快速搭建网站?
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
香港服务器WordPress建站指南:SEO优化与高效部署策略
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
如何在宝塔面板中修改默认建站目录?
实例解析angularjs的filter过滤器
Angular 表单中正确绑定输入值以确保提交与验证正常工作
如何基于云服务器快速搭建网站及云盘系统?
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
如何在IIS中新建站点并解决端口绑定冲突?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
教学论文网站制作软件有哪些,写论文用什么软件
?
如何快速上传建站程序避免常见错误?
javascript中的try catch异常捕获机制用法分析
韩国服务器如何优化跨境访问实现高效连接?
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
利用vue写todolist单页应用
如何快速登录WAP自助建站平台?
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
如何快速搭建FTP站点实现文件共享?
如何快速搭建二级域名独立网站?
Laravel怎么连接多个数据库_Laravel多数据库连接配置
Laravel如何实现用户注册和登录?(Auth脚手架指南)
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
Python并发异常传播_错误处理解析【教程】
如何在腾讯云服务器快速搭建个人网站?
iOS发送验证码倒计时应用
js实现获取鼠标当前的位置
nodejs redis 发布订阅机制封装实现方法及实例代码
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
如何在阿里云购买域名并搭建网站?
Laravel如何升级到最新版本?(升级指南和步骤)
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Laravel如何使用Vite进行前端资源打包?(配置示例)
C++时间戳转换成日期时间的步骤和示例代码
LinuxCD持续部署教程_自动发布与回滚机制
javascript中闭包概念与用法深入理解


作(如HTTP调用、文件读写)。→ 检查应用逻辑,加超时控制,避免在事务里做非DB操作