Notre application consiste (base de données) en trois parties. Une partie héritée utilisant EJB, l'application actuelle utilisant hibernate/spring et une bibliothèque tierce utilisant Mybatis. Les opérations de base de données dans une session sont coordonnées par JTA. L'application est équipée d'un APM rudimentaire.Problème de mise à l'échelle avec Hibernate (Flush?) Dans le contexte JTA
Nous avons récemment observé un comportement très étrange mais pas encore capable de le reproduire et de l'analyser: Notre application fonctionne généralement bien en hibernation mais dans ce cas il y avait une charge provenant d'autres sessions sur toutes les parties de l'application. Au cours de cet événement, l'APM a multiplié par dix les temps d'exécution des transactions dans la partie EJB/Printemps. Nous avons constaté une utilisation intensive du processeur pour les threads exécutant les transactions EJB/Spring, même lorsque le code exécuté dans la transaction était minimal. Après analyse, nous avons appris que les temps surveillés comprenaient notre code d'entreprise ainsi que le temps passé pour Hibernate-Flush. Nous avons également constaté une corrélation entre la quantité d'éléments dans le gestionnaire d'entité et le temps passé pour terminer la transaction.
Notre soupçon actuel est que, pour une raison quelconque, la chasse est en train de devenir berserk.
Est-ce que quelqu'un a déjà vu quelque chose comme ça ou a une idée de ce qui pourrait être la raison?
Si vous avez un doute en ce qui concerne le temps passé pour Hibernate Flush. Vous pouvez donc utiliser différents modes de vidage disponibles dans Hibernate lui-même et vérifier le vrai problème. https://docs.jboss.org/hibernate/orm/4.3/javadocs/org/hibernate/FlushMode.html – Rish
@Rish nous en sommes conscients et avons déjà défini le flushmode d'auto à commit. Nous envisageons actuellement de passer au manuel, mais, comme vous pouvez le deviner, c'est quelque chose qui n'est pas fait à la légère s'il y a déjà beaucoup de code en cours d'exécution. – Jonathan