-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Optimisation de la requête de navires sous charte #3438
Conversation
En prod après une nuit de collecte de stats (donc peu d'utilisation, surtout des actions de la pipeline) : A ajuster ce soir après une journée d'utilisation plus intensive, mais on voit déjà qu'il y a un problème avec la requête SELECT under_charter FROM last_positions [...] qui est exécutée plus de 26 000 fois par heure (7 fois par seconde) et qui consomme au total 11 minutes de "temps de travail" de la BDD par heure. Cette requête est appelée par le use case De plus ou voit que la table Le repository contenant la requête incriminée est : interface DBLastPositionRepository : JpaRepository<LastPositionEntity, Int> {
// [...]
@Query(
value = """
SELECT under_charter
FROM last_positions
WHERE
CASE
WHEN :vesselIdentifier = 'INTERNAL_REFERENCE_NUMBER' THEN cfr
WHEN :vesselIdentifier = 'IRCS' THEN ircs
WHEN :vesselIdentifier = 'EXTERNAL_REFERENCE_NUMBER' THEN external_immatriculation
END = :value
""",
nativeQuery = true,
)
fun findUnderCharterByVesselIdentifierEquals(vesselIdentifier: String, value: String): Boolean
}
|
Quality Gate passedIssues Measures |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM mais on aurait pu même directement utiliser JpaVesselRepository.findVessel()
.
@louptheron je vois qu'il y avait un ticket lié aux perfs de cette requête #2362 Tu penses que ça reste nécessaire de remplacer la logique du use case pour faire un join plutôt qu'un |
@VincentAntoine Bien joué pour l'optimisation, perso ça me semble suffisant : il y aura pas mal de requêtes toutes les 30 minutes, avec l'utilisation du cache, mais comme les index sont utilisés c'est OK. |
Linked issues