云MySQL报锁等待超时错误,如何修改innodb_lock_wait_timeout参数
云MySQL innodb_lock_wait_timeout参数调整方案
报错信息:General error: 1205 Lock wait timeout exceeded; try restarting transaction
一、主流云厂商持久化调整步骤(阿里云/腾讯云/华为云等通用)
- 进入对应云厂商的云数据库RDS控制台,打开目标实例的详情页面
- 在侧边栏找到参数设置(部分厂商命名为参数配置、数据库参数)模块
- 在参数搜索框输入
innodb_lock_wait_timeout,该参数默认值通常为50,单位为秒 - 结合业务场景调整参数值,首次调整建议设置为120即可,不要设置过大避免死锁长时间占用数据库资源
- 提交参数修改后即可生效,绝大多数云厂商该参数无需重启实例就能即时生效
二、临时调整方案(仅适用于测试场景,实例重启后会恢复默认值)
如果仅需要临时调整验证问题,可以直接登录数据库执行以下SQL命令:
-- 查看当前会话的超时时间配置 SHOW VARIABLES LIKE 'innodb_lock_wait_timeout'; -- 调整当前会话的超时时间为120秒,仅对当前登录会话生效 SET SESSION innodb_lock_wait_timeout = 120; -- 若需要全局临时生效,需使用高权限账号执行,实例重启后会恢复默认配置 SET GLOBAL innodb_lock_wait_timeout = 120;
三、配套优化建议(避免仅靠调整参数掩盖核心业务问题)
- 优先排查Yii2应用中是否存在长事务,不要在事务逻辑中嵌入第三方接口调用、本地文件读写等非数据库操作,尽可能缩短事务执行时长
- 检查是否存在热点行更新场景,比如批量操作频繁修改同一条数据,建议拆分批量操作为小批次提交
- 报错时可以执行
SHOW ENGINE INNODB STATUS查看最近的死锁日志,定位冲突的SQL语句针对性优化
内容的提问来源于stack exchange,提问作者almacenamiento fullcloud
相关产品推荐
相关产品推荐

