У нас есть рабочий процесс, который выполняет задачу для проверки записи в БД, когда данные не найдены, он ждет минуту и выполняет задачу.Ниже приведен отрывок из нашего рабочего процесса.
<intermediateCatchEvent id="BHTimer" name="Wait 1 Minute">
<incoming>BHNotActive</incoming>
<outgoing>IsTickOpen</outgoing>
<timerEventDefinition>
<timeDuration xsi:type="tFormalExpression">PT1M</timeDuration>
</timerEventDefinition>
</intermediateCatchEvent>
Мы заметили, что эта задача продолжает выполняться бесконечно, даже когда добавляется запись в БД.Как ни странно, частота выполнения задачи изменяется от 1 минуты до ~ 200 мс, что приводит к накоплению миллионов записей в таблице ACT_HI_ACTINST.Ниже приведена таблица данных статистики одного из многих таких процессов в нашей системе.
Через несколько секунд событие было выполнено тысячи раз и продолжается вечно, создавая миллионы записей процесса для одного и того же задания в таблицах базы данных «ACT_HI_ACTINST» и «ACT_RU_EXECUTION».
Выполнение запроса ниже возвращает миллионы записей:
1. выберите * из ACT_HI_ACTINST, где PROC_INST_ID_ = 'f33c539a-dfe2-11e8-9d30-0050569941b2';2. выберите * в ACT_RU_EXECUTION, где PROC_INST_ID_ = 'f33c539a-dfe2-11e8-9d30-0050569941b2';
Ниже приведена статистика таблиц activiti, когда мы получили проблемы с производительностью.
Имя таблицы: Количество записей
ACT_RU_EXECUTION: 3435162 ACT_RU_TASK: 318122 ACT_RU_IDENTITYLINK: 251334 ACT_RU_VARIABLE: 265008
Имя таблицы: Количество записей 1019 *1019* ACT_HI_IDENTITYLINK: 2526867 ACT_HI_PROCINST: 54564894 ACT_HI_ACTINST: 28169298 ACT_HI_TASKINST: 4769590 ACT_HI_VARINST: 8711507 Некоторые из этих процессов стали сиротами (процессы не были завершены), когда процессы не были завершены (процессы не были завершены).Еще одна вещь, которую мы заметили, - это сообщение об исключении в таблице act_ru_job для таких процессов - сообщение «JobEntity [id = 2786e249-dff6-11e8-a9c8-005056990bf2] было обновлено другой транзакцией одновременно» из столбца сообщения об исключении. У нас есть задание очистки для удаления данных, связанных с завершенными процессами (процессы, которые end_time_ заполнены в таблице act_hi_procinst, но эти процессы не удаляются, поскольку они никогда не заканчивают бесконечный цикл). Мы проверили наш рабочий процесс и не видим параллельных путей выполнения, поэтому мы не уверены, почему может возникнуть эта ошибка.Стоит отметить, что это развертывается в кластерной среде из 2 узлов. Возможно, оба узла одновременно принимают процесс на выполнение. Наши вопросы: 1. Как activiti делает безопасный процесс выполнения кластера?есть ли какой-либо кластер-специфичный конфиг?2. Рабочие процессы, которые мы создали с помощью дизайнера, имеют недостатки?Пожалуйста, ознакомьтесь с приложенным фрагментом рабочего процесса, схемой и рекомендациями.Изображение диаграммы: https://i.stack.imgur.com/xMQWm.jpg. Если кому-то нужен полный XML-файл рабочего процесса, я также могу прикрепить его.Избегать из-за ограничения на количество слов. Рабочие процессы создаются с помощью BPMN Designer.Версия Activiti: 5.17.0, база данных: Oracle, веб-сервер: Tomcat Это вызывает серьезные проблемы с производительностью в нашей производственной среде, любая помощь в решении этой проблемы высоко ценится.