MySQL中的死锁

本文讨论MySQL中的死锁,以便在导致站点关闭、数据库导入停滞或其他Adobe Commerce问题时帮助识别和解决死锁。

受影响的产品和版本

  • Adobe Commerce内部部署2.2.x和2.3.x
  • 云基础架构2.2.x和2.3.x上的Adobe Commerce

问题

当两个或多个事务相互保留并请求锁时,就会在MySQL中出现死锁。 存在的死锁并不总是指示问题,但通常是已发生的某个其他MySQL或Adobe Commerce问题的症状。

应用程序、部署或MySQL日志通常会提及​ “死锁” ​错误或错误​ “尝试获取锁定时发现死锁;请尝试重新启动事务。”

原因

死锁可能有多重原因,但最常见的情况是,在同时执行DML/DDL查询时执行任何交互(网站/进程/cron作业/其他用户/MySQL维护/MySQL导入)。

例如,最佳做法是首先使您的网站处于维护模式,以避免向数据库发出SQL请求,从而避免出现MySQL数据库导入停滞的情况,这可能会导致死锁和数据库导入停滞。

解决方案

  1. 检查应用程序、部署或MySQL日志中是否有死锁错误:

  2. 检查您的MySQL进程列表,了解如何使用命令mysql -e 'show full processlist';运行进程

  3. 如果在云基础架构上的Adobe Commerce上,请检查MySQL从属是否启用。 请参阅本文: 部署变量(MYSQL_USE_SLAVE_CONNECTION)

  4. 根据所涉及的错误,解决方案可能会自行出现,或者您可能需要在需要打开支持票证时提供有用的日志信息。

相关阅读

NOTE
我们知道,本文可能仍然包含行业标准的软件术语,有些人可能会认为这些术语具有种族主义、性别歧视或压迫性,并且可能会使读者感到伤害、创伤或不受欢迎。 Adobe正在努力从我们的代码、文档和用户体验中删除这些术语。
recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a