2016-11-16 2 views
0

Я использую spring-xd для приема данных с помощью пакетных заданий. Большое количество заданий выполняется параллельно в четырех контейнерах. Любой, где от 10 до 40 рабочих мест. Большинство из них заканчиваются менее чем за минуту. Я использую redis (не rabbitmq) и mysql для хранилища данных. Spring-xd-batch использует другую mysql-db для статистики заданий/шагов, и мое приложение использует другую mysql-db для своей собственной цели. Оба mysql-dbs находятся на одном сервере. Все 4 контейнера И admin указывают на тот же mysql-db.Spring-xd-пакетная работа блокировки

То, что я заметил, что в большинстве случаев, все работает нормально, но раз в то время (по крайней мере, один раз в день), я получаю ниже исключение:

Вызванный: org.springframework.dao.DataAccessResourceFailureException : Не удалось получить last_insert_id(); Вложенное исключение - java.sql.SQLException: превышено время ожидания блокировки; попробуйте перезапустить транзакцию.

Это выброшено весной-xd (не мое приложение). Исключение не относится к конкретному контейнеру (это происходит на любом контейнере случайным образом) и не относится к конкретному заданию.

Я потратил время на прополку google. Я обновил мой innodb_lock_wait_timeout до 600 с 50. Я обновил trx_isolation до чтения с помощью повторяемого чтения, но ни один из них не имеет никакого значения. Кроме того, я включил медленное ведение журнала запросов, но все зарегистрированные запросы не совпадают с таймфреймом, когда генерируется исключение.

Любые указатели будут оценены.

+0

надеюсь, что [ссылка] (http://stackoverflow.com/questions/9058816/how-to-generate-a-dynamic-sequence-table-in-mysql) поможет вам – Faiz

+0

Нет. Извините, но я не знаю, Посмотрите, как это связано. Может, я что-то упустил? –

ответ

0

Моим обходным решением для этого было изменение таблиц * _seq от innodb до двигателя mysam. Проработал так вот уже более месяца, и нет блокировки стола.

Смежные вопросы