Bonjour,
J'ai une application qui effectue des acquisitions de signaux sur 16 voies. Toutes les 10 secondes, je dois stocker 40 valeurs réelles par voie --> au total 640 valeurs réelles sont à stocker toutes les 10 secondes.
Voici quelques explications de ma base dont de schéma est en pièce jointe :
- table DEF contient la définition des voies (16 voies)
- table INDIC contient la définition des indicateurs à stocker (40 indics)
- table SEG contient les infos d'un segment (1 segment = plage de 10s)
- table VAL_INDIC est la table contenant les valeurs réelles (40 valeurs/voie/segment). Cette table contient 3 clefs étrangères pour les tables DEF, INDIC et SEG.
La tâche d'insertion est la suivante:
- au bout de 10 secondes, j'insère un segment dans SEG
- je parcourt les 16 voies et pour chaque voie j'insère les 40 valeurs
Cette tâche fonctionne mais les temps d'insertions sont de plus en plus longs, la croissance est quasiment linéraire:
- 800ms pour le segment 1 (= base vide)
- 4300ms pour segment 5300
Mon problème est qu'au bout d'un moment l'insertion prendra plus de temps que l'acquisition est mon application va planter
En cherchant sur le forum, j'ai trouvé quelques pistes que j'ai déjà mis en place:
- en début d'acquisition, je retire les 3 clefs étrangères de la table VAL_INDIC. Celles-ci sont remises en fin d'acquisition.
- je n'utilise pas le générateur pour incrémenter le ID de la table VAL_INDIC: je recherche le max au début de l'insert puis je l'incrémente. Pas de problème à priori car ma base est mono-poste, mono-user.
- les 640 insertions sont dans une transaction, le commit est uniquement fait à la fin.
Je gagne en rapidité mais malgré tout les temps d'insertions sont de plus en plus longs:
- 800ms pour le segment 1 (= base vide)
- 2000ms pour segment 5300
D'où mes
- ce comportement est-il normal ?
- mon schéma de base base est-il correct ? Est-ce que je peux l'améliorer ?
- est-il possible de stabiliser ces temps d'insertions ? Si les 640 insertions prennent 4000ms, pas grave mais il ne faut pas que ce temps augmente.
Merci d'avance pour vos conseils.
Partager