Re: Extrème lenteur au premier enregistrement ou suppression

Posté par JYM le 8/6/2006 16:22:51
Salut Romuald ,

alors voilà :

un fichier commande (438 octets par enr.)
clé unique NumCde entier sur 8 octets

(liaison 0,n 1,1) par numCde

un fichier ligneCommande (216 octets par enr.)
dont 2 rubriques mémos peut souvent remplies
LigneCommande possède une clé étrangère unique
ligneCommande_PK : Numcde+NumLigne

(NumLigne entier sur 2 octets)


Phénomene !
Soit :
Création de la première commande :
(création donc aucun filtre) .
l'ajout de la première ligne de commande met 2 mn.
ensuite aucun souci même pour de nouvelle commande saisie.

Soit
Modification d'une première commande:
Pour des raisons pratiques , je suis obligé d'éffacer toutes les lignes d'une commandes dans la base et de les ajoutées ensuite.
le nombre de ligne par commande est d'environ 20.

Les 2 minutes d'attentes ou plantage du pc , se font
au premier appel de l'application à la fonction
hajoute ,ou hsupprime (avec le disque dur qui tourne un max)
Ensuite pas de problème

// ouverture du projet
hcreationsiinexistant("*")
--> 1 seconde

pour l'ajout de ligne de commande.
Hajoute(lignecde)


pour la suppression :
j'ai essayé 2 méthode:
REQ_SUPP_LIGNECDE.P_NUMCDE=commande.NUM_CDE
HExécuteRequête(REQ_SUPP_LIGNECDE)
ou
HFiltre(LIGNECDE,NUM_CDE,COMMANDE.NUM_CDE,COMMANDE.NUM_CDE)
HLitPremier(LIGNECDE,NUM_CDE)
TANTQUE PAS HEnDehors(LIGNECDE)
HSupprime(LIGNECDE)
HLitSuivant(LIGNECDE,NUM_CDE)
FIN
HDésactiveFiltre(LIGNECDE)
(j'ai aussi essayé en filtrant sur ligneCommande_PK)

au déboggeur , le hfiltre est immédiat c'est vraiment sur la fonction hsupprime que ce la m...

Nb : Aucun Trigger , ni de table fille sur ligneCommande.
pour tout ce qui est lecture d'enr. aucun souci.

J'ai l'impression que Windows essaye de charger en cache tout les index du fichier ligneCommande au premier appel de d'une de ces deux fonctions.

(j'ai aussi essayé hoptimise() au démarrage
du projet et là le phénomène n'apparait plus dans la saisie ou modification de commande mais à l'ouveture (logique), soit l'application rend la main au bout de 3 ,4 minnutes
ou alors plante carrément (toujours au premier lancement de la journée).

j'ai effectué les tests en client/ serveur.
et là idem, sauf que c'est le disque dur serveur qui se met à tourner pendant 2 minutes.
Tester au déboggeur,c'est vraiment la commande hajoute ou hsupprime qui déclenche le phénomène.


Peut-être une piste , a savoir qu'a chaque ligne de produit affichée dans la fiche de commande , un calcul statistique est effectué sur ligneCommande concernant le produit en cours et le client.( stat calculé par requête)
mais aucun temps d'attente concernant cet affichage, et requete annulée si tôt affichée, et retour du pointeur sur la commande en cours)


JYM

Cette contribution était de : http://old.wdforge.org/newbb/viewtopic.php?forum=17&topic_id=4129&post_id=17197