我有 6 个脚本/任务。他们每个人都启动一个 MySQL 事务,然后执行它的工作,这意味着从 MySQL 数据库中选择/更新/插入/删除,然后回滚。
因此,如果数据库处于给定状态 S,我启动一个任务,当任务终止时,数据库又回到状态 S。
当我按顺序启动脚本时,一切正常:
- 状态 S 的 DB
- 任务1
- 状态 S 的 DB
- 任务 2
- 状态 S 的 DB
- ...
- ...
- 任务 6
- 状态 S 的 DB
但我想通过多线程和并行启动脚本来加速这个过程。
- 状态 S 的 DB
- 6个任务同时进行
- 状态 S 的 DB
有些任务随机失败,我有时会收到此错误:
SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction
我不明白,我认为交易是为此而生的。有什么我想念的吗?欢迎任何经验,建议,线索。
MySQL的配置是:
innodb_lock_wait_timeout = 500
transaction-isolation = SERIALIZABLE
我在每个会话开始时添加 AUTOCOMMIT = 0 。
PS:数据库是在我之后更改的 REPEATABLE READ 隔离级别下构建和使用的。