MySQL 等待处理程序提交

分享于2022年07月17日 mysql 问答
【问题标题】:MySQL waiting for handler commitMySQL 等待处理程序提交
【发布时间】:2022-07-01 19:14:18
【问题描述】:

从 MySQL 5.7 升级到 8.0 后,我偶尔会遇到查询永远停留在等待处理程序提交状态。

42425 generic %:45408 objects_db Killed 59608 waiting for handler commit COMMIT
42426 generic %:45410 objects_db Killed 59608 waiting for handler commit commit
42434 generic %:45428 objects_db Killed 59608 waiting for handler commit COMMIT
42444 generic %:45454 objects_db Killed 59608 waiting for handler commit REPLACE INTO vvObjectSearch(CompanyID, ObjectTypeID, ObjectID, PropertyID, `Value`)
  1. 无法终止这些查询
  2. 没有办法重新启动 MySQL 服务 - 它永远挂起,唯一的方法是 kill -9
  3. 试图将 range_optimizer_max_mem_size 更改为高值,包括 0
  4. 错误日志中没有任何内容

服务器正在与另一台服务器进行主-主复制。两台服务器完全相同,但服务于不同的客户端。由于某种原因,另一台服务器没有此问题。 经过几周的研究,我从头开始重建服务器并从第二台服务器恢复了新的备份(xtrabackup),从而恢复了复制。没有帮助。 有什么想法吗?


【解决方案1】:

战斗了 3 个月后,我会回答我自己的问题,以防有人遇到类似问题。 背景:在 MySQL 8.0.27 中,replica_parallel_workers 的默认值已从零(单线程)更改为 4。 我将replica_parallel_workers 更改为零,问题就消失了。 看起来像是 MySQL 中的一个错误,导致从属线程之间出现死锁。

【讨论】: