首页 > 数据库 > mysql教程 > 如何识别MySQL中导致'锁定等待超时”错误的特定查询?

如何识别MySQL中导致'锁定等待超时”错误的特定查询?

Susan Sarandon
发布: 2024-12-31 06:10:09
原创
686 人浏览过

How to Identify the Specific Query Causing a

当 MySQL 发生 Lock wait timeout timeout returned 错误时,如何识别持有锁的特定查询

介绍:

MySQL 中的锁等待超时超出错误表示查询在尝试时遇到锁等待超时访问锁定的资源。当多个查询访问相同的数据并且一个查询由于锁冲突而阻塞另一个查询的执行时,可能会发生这种情况。确定导致锁定等待的特定查询有助于解决问题并防止将来再次发生。

识别罪魁祸首查询:

在错误日志中,单词“ transaction”是一个关键指标,表明尝试访​​问数据库的查询正在修改一个或多个 InnoDB 表。知道触发错误的查询,就可以识别涉及的表。

使用命令 SHOW ENGINE INNODB STATUSG,可以获得有关受影响的表和锁定状态的信息。此命令显示详细信息,包括:

  • RW-共享自旋:指定等待共享读锁的自旋数量。
  • RW -excl spins: 表示等待独占的旋转次数锁。
  • 互斥体自旋等待: 等待互斥体的自旋数量。

示例输出:

SHOW ENGINE INNODB STATUSG 的以下输出显示特定查询正在等待独占锁附件表:

RW-excl spins: 787046, OS waits: 39353
...
Latest foreign key error (a full list is printed in the InnoDB error log when a foreign key error occurs):
...
Transaction:
TRANSACTION 0 606162814, ACTIVE 0 sec, process no 29956, OS thread id 1223895360 updating or deleting, thread declared inside InnoDB 499
mysql tables in use 1, locked 1
...
Foreign key constraint fails for table `backoffice`.`attachment`:

,
  CONSTRAINT `attachment_ibfk_2` FOREIGN KEY (`file_id`) REFERENCES `file` (`file_id`)
Trying to delete or update in parent table, in index `PRIMARY` tuple:
...
But in child table `backoffice`.`attachment`, in index `PRIMARY`, there is a record:
登录后复制

解决方案:

要解决此问题,您可以增加 innodb_lock_wait_timeout 参数的值,该参数指定事务执行的最长时间在报告错误之前等待锁定。通过增加此超时,您可以为事务完成提供更多的缓冲时间,并减少锁定超时错误的可能性。

设置 innodb_lock_wait_timeout:

  • 要永久设置超时,请将以下行添加到 /etc/my.cnf 并重新启动MySQL:

    [mysqld]
    innodb_lock_wait_timeout=120
    登录后复制
  • 要设置当前会话的超时,请执行以下查询:

    SET GLOBAL innodb_lock_wait_timeout = 120;
    登录后复制

以上是如何识别MySQL中导致'锁定等待超时”错误的特定查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板