Наше приложение состоит из трех частей. Унаследованная часть, использующая EJB, текущее приложение, использующее hibernate/spring и стороннюю библиотеку с использованием Mybatis. Операции базы данных за один сеанс координируются JTA. Приложение оснащено рудиментарным APM.Масштабирование проблемы с Hibernate (Flush?) В контексте JTA
Мы недавно увидели очень странное поведение, но еще не смогли воспроизвести и проанализировать его: наше приложение обычно работает в режиме hibernate-wise, но в этом случае на всех участках приложения был загружен другой сеанс. Во время этого события APM сообщила о временах выполнения транзакций в EJB/Spring, умноженной в десять раз. Мы видели интенсивное использование ЦП для тех потоков, которые выполняли транзакции EJB/Spring, даже когда фактический код, выполненный в транзакции, был минимальным.
После анализа мы узнали, что те контролируемые времена включают в себя наш бизнес-код, а также время, проведенное для Hibernate-Flush. Мы также видели корреляцию между количеством элементов в entitymanager и временем, затраченным на завершение транзакции.
Наше текущее подозрение в том, что по какой-то причине флеш работает с берсерком.
Кто-нибудь видел что-то подобное или имеет какое-либо представление о том, что может быть причиной?
Если у вас есть сомнения относительно времени, затрачиваемого на Hibernate Flush. Таким образом, вы можете использовать различные режимы Flush, доступные в Hibernate, и проверить реальную проблему. https://docs.jboss.org/hibernate/orm/4.3/javadocs/org/hibernate/FlushMode.html – Rish
@Rish мы знаем об этом и уже установили flushmode из auto для фиксации. В настоящее время мы рассматриваем возможность использования руководства, но, как вы можете догадаться, это не делается беззаботно, если уже существует значительный объем кода. – Jonathan