|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre éclairé
![]() Inscription : décembre 2004 Messages : 379 ![]() |
hello,
pour les spécialistes... j'ai un "gros" script sql (plus 300 requetes) qui me sert à extraire des données d'une base. ce script fonctionne depuis 2 ans environ, mais "bizarrement"... ainsi, quand je le passe dans une de mes applications qui l'exécute, il passe en environ 1/2 heure à 3 heures en fonction de la machine et du système (linux ou windows) quand le même script passe sur les mêmes machines avec l'utilitaire "isql" il passe en 8 heures environ, voir jusqu'à 3 jours que ce soit sous linux ou windows. il y a bien sur des "commit" régulier après des insert/update. le plus marrant et que certaine procédure stockée mettent des heures à "passer", alors qu'une fois arrêté et relancé manuellement ces mêmes procédures passent en quelques minutes. en fait, lorsque le script est interrompu, puis relancé (sur la commande suivante) cela va vite et lorsqu'il passe d'une traite les requêtes mettent de plus en plus de temps, comme si le serveur s'étouffé avec??? une dernière chose, les resources du système montent très fort au début, lorsque le script démarre et au fur à mesure que les requêtes passent, la charge diminue et bien sur la durée des requêtes augmente??? depuis donc de temps à autre je cherche le pourquoi de temps à autre. une infos, c'est firebird version 1.5 en classic server qui fonctionne et sous linux et sous windows et les 2 systèmes donnent exactement les mêmes résultats, donc très lent lorsque le script et exécuté en une fois et très rapide lorsqu'une déconnexion/reconnexion et faite entre chaque requête. quelqu'un à t'il ce problème, existe t'il un paramètre??? une idée, des propositions??? à vous... |
|
|
00
|
|
|
#2 |
|
Membre du Club
![]() Inscription : juillet 2005 Messages : 48 ![]() |
essaye de faire une petite sauvegarde juste avant de lancer tes requettes.
|
|
|
00
|
|
|
#3 | ||
|
Membre éclairé
![]() Inscription : décembre 2004 Messages : 379 ![]() |
cela est fait systématiquement, je recoi un backup, il me faut donc le restaurer (dommage...)
en outre, le scripte commence par retirer tous les index, procédures et triggers inutiliser, cela à fait gagner plus d'un jour de traitement! pour ceux que cela intéresse, voici le code sql qui fait ce "boulot" Code :
truc très con, toujours utiliser une copie!!! dans le cas contraire, sorter un drap et pleurer à chaudes larmes si vous n'avez de backup... il ne faut que quelques secondes pour détruire toutes les tables, index et autre d'une base de données... il faut dire que la base de données en question à 237 tables, 124 procédures et un millier d'index! donc le ménage me fait gagner un temp considérable. les procédures qui "bloques" sont typiquement des procédures contenant une boucle "FOR" et dont le corps effectue un "UPDATE" ce mécanisme bien que curieux et infiniment plus rapide que de faire un UPDATE avec un ou plusieurs SELECT pour obtenir les données à placer dans les champs. ceci et la cause directe que firebird n'utilise pas les index pour les "sous-select". ce type de procédure contourne donc ce problème. ici, je m'apprête à refaire un test en ménagant une pause de 5 secondes entres les requêtes (après déconnexion), histoire de "voir" si le nombre de fb_inet_server qui semble être le problème. en effet, j'ai constaté que la connexion/déconnexion entres chaques requêtes accélères les choses un certain temps, mais à chaque reconnexion une instance fb_inet_server apparait, donc là, il y a surement un os. c'est probablement la piste à creuser??? |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com