POURQUOI VOTRE SYSTÈME DE BASE DE DONNÉES EST SI LENT ?

Ecran
values.image.name

En tant qu’expert nous accompagnons les entreprises lors de la conception de leurs outils informatique, mais pas que. Nous en assurons également leur maintenance afin qu'ils puissent utiliser un outil toujours performant.

Notre client, rencontrait des ralentissements sur son système de base de données depuis quelque temps. Il était donc important d'y remédier rapidement, afin d'assurer la performance de ce développement. 

Ordinateur portable
values.image.name

Alexis - Tech Lead sur le développement Master - Process nous explique cela :

 
" Je travaille sur un outil qui s’applique à diminuer les accidents du travail par la prévention. Il permet de définir des situations dangereuses dans une entreprise et de trouver des solutions pour éviter qu’elles ne surviennent.
 
Le développement réalisé il y a plusieurs années sur un jeu de données relativement restreint, connaissait un ralentissement depuis quelque temps, compte tenu de la forte croissance des différents scénarios. Ce ralentissement était particulièrement important dans les processus de suppression.
 
En effet, la définition des données de l’application est basée sur une arborescence afin de permettre une grande souplesse de configuration. Or pour supprimer une ligne en haut de l’arborescence, il est nécessaire de supprimer les lignes enfants de manière récursive avec toutes les informations qui peuvent s’y rattacher.
Ordinateur portable
values.image.name
Il n’est pas rare d’avoir 6 ou 7 niveaux dans l’arborescence (branche, sous-branche, sous-sous-branche…). De ce fait une « simple » suppression d’une branche principale peut entrainer la suppression de plusieurs milliers de sous branches. Ce qui pouvait prendre environ entre 10 et 20 minutes de traitement sur la base actuelle.

L’expérience utilisateur s’en trouvait fortement dégradée; sans parler de la perte de temps. J’ai donc décidé de travailler sur une optimisation dans l’optique d’améliorer les temps de réponse.

Les index mis en place dés le début du projet étaient judicieux pour avoir de bonnes performances en termes de recherche. J’ai donc réfléchi aux index qui étaient nécessaires pour optimiser la suppression. Ces index doivent en effet, permettre de faire des pré sélections de lignes, afin d’éviter de parcourir l’ensemble de la table à chaque suppression. De plus, j’ai dû multiplier ces index sur plusieurs branches afin d’optimiser encore les temps de recherche.

Au final, cela a permis de passer d’un temps de réponse de 10-20 min … à 4-5 secondes sur une base de données postgresql ! "

Bonne performance !

Cette amélioration représente un gain de temps énorme : la tâche devient 240 fois plus rapide et 240 fois moins impactante au niveau énergétique, à puissance de traitement équivalent (même si pour être complètement transparent, cette modification a généra une légère augmentation sur l’espace disque : 100ko environ, dans ce cas ; ce qui reste comparativement faible par rapport au global).