mysql - MySQL - 获取“超过锁定等待超时;尝试重新启动事务”
问题描述
MySQL
我在 Oracle DB 和 5.7 版本中创建了一个包含 4 列的表。数据库中存在的总记录为 4 912 442。现在我正在尝试在数据库中再插入一条 100 000 条记录MySQL
。
我创建了简单Spring Boot
的应用程序并从文件中读取记录并插入到MySQL
数据库中。
MySQL
在记录计数 4912442 后将记录插入数据库时出现以下错误:
[WARN ] SqlExceptionHelper - SQL Error: 1205, SQLState: 40001
[ERROR] SqlExceptionHelper - Lock wait timeout exceeded; try restarting transaction
注意: MySQL 数据库由 MASTER-MASTER 集群在 2 个实例中使用。
并且即使出现上述错误也执行以下命令:
SET GLOBAL innodb_lock_wait_timeout = 5000;
SET innodb_lock_wait_timeout = 5000;
解决方案
Lock wait timeout
通常发生在事务更新/插入正在等待已被其他事务锁定的数据行时。
可能的原因可能是数据量大、表设计不当、约束等。
这里有一些解决方案应该有效:
检查锁定等待时间的当前值
show variables like 'innodb_lock_wait_timeout
;并将其更新为120
更高的值。或者您可以在 /etc/my.cnf 中使用此行将其永久设置为更高的值,但请确保重新启动 MySQL,如果无法重新启动则只需运行查询
SET GLOBAL innodb_lock_wait_timeout = 120;
[mysqld] innodb_lock_wait_timeout=120
推荐阅读
- f# - 带有 Suave 和 Fable.Remoting 的 MissingMethodException
- view - CRM 动态。为适当的安全角色设置默认视图
- ios - App Store Connect:嵌套包的问题 - 如何解决?
- django - 使用 sendgrid 域身份验证将电子邮件发送到 Django 中的垃圾邮件
- javascript - 在 React 中单击时不显示自定义弹出模式组件
- powerpoint - 从 VSTO 插件关闭 Powerpoint 格式形状窗格
- c++ - 当用作 if 条件时,范围是否通过 emtpy() 成员函数转换为布尔值?
- c++ - Boost 序列化:在不破坏兼容性的情况下添加新的 register_type
- azure - Azure 来宾用户的 OAuth2 隐式授权流失败
- reactjs - 为什么 vscode 在边缘而不是 chrome 中打开反应应用程序?