我使用SpringXD通过批处理作业进行数据摄取。大量作业在4个容器中并行运行。任何10到40个工作岗位的地方。其中大部分在不到一分钟内完成。我使用redis(而不是rabbitmq)和mysql进行数据存储。SpringXD批处理使用不同的mysql数据库进行作业/步骤统计,而我的应用程序使用不同的mysql数据库用于自己的目的。两个mysql数据库都在同一台服务器上。所有4个容器和管理员都指向同一个mysql db。
我注意到,大多数时候,一切都很好,但偶尔(至少每天一次),我确实会遇到以下例外:
原因:org.springframework.dao。DataAccessResourceFailureException:无法获取last_insert_id();嵌套异常是java.sql。SQLException:超过锁等待超时;尝试重新启动事务。
这是由spring xd(不是我的应用程序)抛出的。异常不特定于特定容器(它随机发生在任何容器上),也不特定于某个特定作业。
我花了时间在谷歌上除草。我已经将innodb_lock_wait_timeout从50更新为600。我已经将trx_isolation从可重复读取更新为已提交读取,但这些似乎都没有任何区别。此外,我启用了慢速查询日志记录,但所有记录的查询都与抛出异常时的时间段不匹配。
任何指点都将不胜感激。