[Résolu] Boucle et exécution nombreuse de requêtes
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Bonjour

Je travaille sur un outil statistique qui lit des données dans des fichiers à gros volume (3 fichiers de 2Go).

J'ai donc une boucle qui parcour une vue au sein de laquelle :
Je fait des hlitrecherche dans 3 fichier
J'exécute 2 requêtes de cumul sur une période pour un code dans des fichiers pour lesquels la date et le code sont des clés.
Pour éviter les fuite de mémoire, aucune déclaration de mémoire n'intervient dans la boucle

Chaque boucle execute donc :
3 hlitrecherche (recherches génériques)
2 hexecuterequeteSQL (et lecture de premier et unique enregistrement du résultat)
Un affichage de chronométrage et de jauges

Le disque est libéré à 50% et défragmenté

Passé 600 boucles, le temps d'excécution (mesuré en moins d'un ou 2 centièmes de secondes par boucles) s'éffondre subitement et l'exécution des requêtes prends alors plusieurs dizaines de secondes et cela va en empirant.

J'ai rallongé le seuil des 600 boucles (400 au départ) en :
- fermant les fichiers et libérant les sources de données tous les 100 boucles
- supprimant la gestion du calcul du temps restant (voir exemples WD jauges)

Je ne sais plus vers quoi m'orienter à présent pour conserver un temps d'exécution par boucle constant.

ci joint le code d'exécution des requêtes
HAnnuleDéclaration(sSQL)
SI HExécuteRequêteSQL(sSQL,hRequêteSansCorrectionHF+hAvecFiltre,ChaîneConstruit(cSQLStock,cCCODE,DATEMIN,DATEFIN)) ALORS
	SI HLitPremier(sSQL) ALORS
		nQte+=sSQL.QTE
	FIN
FIN
HAnnuleDéclaration(sSQL)[code]
Il semble que l'utilisation du filtre (à la place des vues) et le fait de ne pas activer la correction HF soit un vecteur qui accroit les performances...

Existe-t il alors un mode d'exécution optimal pour les requetes du types : 
[code]SELECT SUM(RUBQTE) AS QTE FROM FICHIER WHERE RUBCODE='...' AND RUBDATE BETWEEN 'D1' AND 'D2'

En effet ces requêtes ne retourne qu'une ligne non modifiable...

Merci d'avance aux experts des requêtes avec HF

Contribution le : 20/10/2006 11:30

Edité par drcharly93 sur 23/10/2006 20:48:05
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et exécution nombreuse de requêtes
ChefDeProjet WDF
Inscrit:
02/06/2003 13:49
Post(s): 151
les fichiers de quel type
l'acces via quoi
merci

Contribution le : 20/10/2006 17:13
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et exécution nombreuse de requêtes
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
c'est de l'HF Classic

Contribution le : 20/10/2006 17:41
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et exécution nombreuse de requêtes
ChefDeProjet WDF
Inscrit:
02/06/2003 13:49
Post(s): 151
je tenterais le meme code en client serveur
cela ne demande que 10mn de travail
juste pour voir

le moteur wmanta gerera peut etre plus raisonablement les boucles sur des requetes

sur la requete boucle as tu tenté le HOptimiseRequête
ca mange pas de pain !
l'efficacité ??

Contribution le : 20/10/2006 20:20
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et exécution nombreuse de requêtes
ChefDeProjet WDF
Inscrit:
02/05/2006 21:28
Post(s): 160
as-tu essayé hpreparerequetsql()
et exécuter ta requete dans tes boucles ?

voci un exemple de WD pour oracle:

// Exécution d'une même requête sous Oracle
// Déclaration d'une source de données
// Cette source de données correspond à la requête.
Insert est une source de données
// Déclaration d'un des paramètres de la requête
// Le type de ce paramètre est un entier
Insert.age=0
i est un entier
//Préparation de la requête pour de multiples exécutions
HPrepareRequeteSQL(Insert, Connexion, ...
hRequeteSansCorrection, "INSERT INTO PERSONE VALUES (:nom, :prenom, :age )")
// Boucle d'exécution de la requête
// Seuls quelques paramètres sont modifiés
POUR i=1 à 10
Insert.nom="Nom"+i
Insert.prenom="Prenom"+i
Insert.age=i
HExecuteRequeteSQL(Insert)
FIN

Contribution le : 20/10/2006 21:20
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et exécution nombreuse de requêtes
Utilisateur WDF
Inscrit:
06/04/2004 10:06
Post(s): 61
Salut R&B,

J'ai remarqué aussi qu'en utilisant plusieurs fois la fonction "hfiltre" sur le même fichier, le réseau rallenti.

exemple :

Sur un champ saisie, à chaque touche enfoncée, il y a un hfiltre et affichage dans une table.
Après un certain temps, les réponses s'allongent.
La seule solution que j'ai trouvé, c'est de sortir de l'application et reconnection.
Et après, la vitesse est revenue.

Windev tient peut être tous ces filtres en mémoire ?

Un désactivefiltre est-il à prévoir ?


@+
chonchon,

Contribution le : 21/10/2006 10:33
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et exécution nombreuse de requêtes
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Merci de vos conseils.

Après moulte tentatives, j'ai lancé l'optimisation de ma requête qui m'invitais à constituer une clé composée dans le fichier (en plus des deux rubriques clés).
Evidement, il m'a fallu être patient car la mise à jour automatique des données sur un fichier de 1.96 Go prends plus de deux heures.

Mais le résultat est HALLUCINANT !
Non seulement j'en fini avec cet engorgement arrivé à un certain nombre de boucles... mais j'arrive à 2 minutes de traitement sur 4000 boucle (soit 300 000 lectures).

Ce test étant significatif quand aux habitudes d'utilisation je considère l'incident clot.

PS : pensez à l'optimisation des requêtes, c'est un reflexe souvent oublié qui peut vous sauver du désastre.

Contribution le : 23/10/2006 14:14
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2