讲师中心 微信公众号

工具推荐

视频效率加速
AniShort
AniShort

AI短剧协同制作平台

剧云
剧云

中文短剧剧本制作平台

updream

一键生成高质量推广成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

如何配置MySQL参数避免死锁检测在高并发下拖垮系统?

夜墨小哥_4356

夜墨小哥_4356

发布时间:2026-11-15 10:04:26

|

550人浏览过

|

来源于php中文网

原创

MySQL死锁检测在高并发下成瓶颈,是因为每次锁等待都触发Wait-for Graph构建与DFS遍历,热点行争抢导致每秒多次CPU密集计算,复杂度接近O(N²),使检测行为本身成为性能热点。

如何配置mysql参数避免死锁检测在高并发下拖垮系统?

禁用 innodb_deadlock_detect 是高并发下最有效的“减负”手段,但必须配合锁顺序统一和事务瘦身,否则死锁会直接卡死连接。

为什么默认开启的死锁检测在高并发下反而成瓶颈

MySQL 的死锁检测不是简单扫描,而是对每个 wait-for 图做深度遍历。当每秒有上千个事务在争抢几十行热点数据时(比如库存扣减),InnoDB 会为每个新锁请求构建等待图并检查环路——这个过程本身就要加全局锁、遍历内存结构,CPU 使用率飙升,响应延迟翻倍。这不是“检测慢”,是检测行为本身成了性能热点。

常见现象包括:SHOW ENGINE INNODB STATUS 中 LATEST DETECTED DEADLOCK 频繁出现、innodb_row_lock_waits 持续上涨但平均等待时间不长、线程堆栈大量卡在 wait_for_lock 或 deadlock_check 函数里。

win可用的mysql指令skill
win可用的mysql指令skill

安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。

下载

关闭检测前必须满足的三个硬条件

关掉死锁检测不等于放任死锁,而是把“自动刹车”换成“提前装防撞梁”。以下三点缺一不可:

  • 所有跨表/多行更新操作,严格按固定顺序访问资源(例如:总是先 UPDATE orders,再 UPDATE inventory,再 UPDATE account)
  • 事务内只做必要操作,SELECT ... FOR UPDATE 后紧跟 UPDATE,中间不掺杂 RPC 调用、日志写入或复杂计算
  • 热点行更新使用 SELECT ... FOR UPDATE SKIP LOCKED(MySQL 8.0+)或应用层重试 + innodb_lock_wait_timeout 降为 1–3 秒

innodb_deadlock_detect=OFF 的正确配置方式

不能只改配置项,必须搭配超时与监控:

  • 在 my.cnf 中设置:
    innodb_deadlock_detect = OFF<br>innodb_lock_wait_timeout = 2
  • 重启后验证:SELECT @@innodb_deadlock_detect; 返回 OFF,且 SHOW STATUS LIKE 'Innodb_deadlocks'; 计数器将永远为 0(它不再统计)
  • 必须补上应用层逻辑:捕获 ERROR 1205 (40001): Deadlock found when trying to get lock 改为 ERROR 1205 已不会出现,实际收到的是 ERROR 1205 替代为 Lock wait timeout exceeded(错误码 1205 消失,转而看到更多 1205?不对,是 1213 消失,你看到的是 1205 超时)——重点:应用必须能区分 1205(已弃用)和 1205 实际是 1213?不,关闭检测后,死锁不再触发 1213,只会因超时抛出 ERROR 1205?错,标准错误码是:ERROR 1205 是死锁回滚,ERROR 1205 不再发生;真正出现的是 ERROR 1205?查证:MySQL 官方文档明确,关闭检测后,原本该报 ERROR 1213(Deadlock found)的场景,会变成阻塞直到 innodb_lock_wait_timeout 触发,抛出 ERROR 1205(Lock wait timeout exceeded)。所以应用重试逻辑要覆盖 1205,而非等 1213。
  • 必须开启 Performance Schema 锁监控:
    UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME = 'events_stages_current';<br>UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME = 'wait/lock/table/sql/handler';
    用于事后定位哪类 SQL 在锁竞争最激烈

最容易被忽略的兼容性陷阱

MySQL 5.7 不支持 SKIP LOCKED,若用 SELECT ... FOR UPDATE 加锁后做业务判断再更新,关闭检测后可能让线程挂满 2 秒才超时,连接池瞬间打满。此时要么升级到 8.0,要么改用乐观锁(UPDATE ... WHERE version = ?)+ 应用重试。另外,READ COMMITTED 隔离级别下间隙锁被禁用,虽降低死锁概率,但可能引发幻读——金融类业务慎切。

热门AI工具

更多
小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2613

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1579

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

935

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3752

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

6548

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1359

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6831

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

5822

2023.08.14

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

40

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn