Bonjour,
Je suis en train de tester mon application dont la base a migré de France à un autre pays (ping 25ms contre 1ms sur l'ancien serveur de base de données).
Du coup tout est infiniment plus long au niveau des temps de récupération des données (les temps d'exécution en base étant identiques).
Un début de solution c'est d'utiliser le paramètre hibernate.jdbc.fetch_size mais quand je teste de nouveau des requêtes en syntaxe Hibernate (HQL) je ne vois aucune différence, et c'est toujours bien trop long.
Si j'écris la requête en NativeQuery (exemple select * d'une table), c'est beaucoup plus rapide...sauf que je ne peux pas faire ça car toutes les données des objets mappés (clés étrangères) ne sont du coup pas récupérés.
Ca serait un travail de Titan (+risques de régression) de recenser tous les champs utiles et en plus ça fait perdre l'intérêt d'Hibernate.
Si j'écris en NativeQuery en mappant avec ma classe em.createNativeQuery(sql.toString(), MyHibernateClass); c'est même pire que quand c'était en HQL.
Bref, je suis dans le flou car si ce paramètre hibernate.jdbc.fetch_size me permet de retrouver mes performances initiales sur une requête en SQL native "select a, b, c from TA, TB, where TA.id = TB.id and...", je ne vois pas comment paramétrer mon application si possible sans devoir tout réécrire.
Pour info sur une action dans mon application (avec plusieurs requêtes derrière) je passe de 20 secondes à près de 2 minutes avec uniquement ce changement de base de données.
Merci.
Partager