代码之家  ›  专栏  ›  技术社区  ›  olumide adebayo

Spring xd批处理作业锁定

  •  1
  • olumide adebayo  · 技术社区  · 8 年前

    我使用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从可重复读取更新为已提交读取,但这些似乎都没有任何区别。此外,我启用了慢速查询日志记录,但所有记录的查询都与抛出异常时的时间段不匹配。

    任何指点都将不胜感激。

    1 回复  |  直到 8 年前
        1
  •  1
  •   olumide adebayo    8 年前

    我的解决方法是将*_seq表从innodb更改为mysam引擎。像这样运行了一个多月,没有桌子锁了。