PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → POUR TOUT source de données - accès réseau
POUR TOUT source de données - accès réseau
Débuté par Fabien, 03 avr. 2019 14:18 - 6 réponses
Posté le 03 avril 2019 - 14:18
Bonjour,

J'ai une requête simple qui me ramène 30000 enregistrements. La requête est exécutée en 40ms, donc pas de problème

En revanche, c'est le parcours de la source de données qui prend environ 900ms....

Après quelques recherche et avec un Wireshark j'ai remarqué qu'il y avait énormément d'accès réseau (environ 7000) lors du parcours.

Avec un AnalyseurDebut et AnalyseurFin, on voit bien que c'est le HLitSuivant (implicite dans la boucle qui prend du temps)

Ma question : comment parcourez-vous des sources de données de grand volume ???

D'avance merci de vos réponse.

Fabien
Membre enregistré
1 923 messages
Popularité : +53 (65 votes)
Posté le 03 avril 2019 - 15:01
Bonjour,

Quel est le code ?

--
Bon dev,
Jean-Pierre
Membre enregistré
24 messages
Popularité : +1 (1 vote)
Posté le 03 avril 2019 - 15:57
Tu peux tenter une lecture en masse avec :
FichierVersTableau

https://doc.pcsoft.fr/fr-FR/?1000018833&1000018833
Posté le 15 avril 2019 - 16:29
Salut BSC, merci pour ta réponse, j'ai effectivement testé le fichierVersTableau mais le HLitSuivant est aussi exécuté dans cette fonction et prend également du temps
Posté le 15 avril 2019 - 16:35
Bonjour,

Le code a été simplifié pour les tests :

Procedure test_perf()

AnalyseurDébut()

LOCAL
reqFacture est une Requête SQL =
[
SELECT
Facent_coso, Facent_nofc,
CASE Facent_dtfa WHEN '0' THEN '' ELSE CONCAT('',19000000 + Facent_dtfa) END AS Facent_dtfa,
Facent_stfc, Facent_cosefa, Facent_coclcd, Facent_cocllv, Facent_coclfa,
Facent_coclrg, Facent_coclrm, Facent_coclgr, Facent_staj, Facent_norgaj,
CASE Facent_dtdbvdfl WHEN '0' THEN '' ELSE CONCAT('',19000000 + Facent_dtdbvdfl) END AS Facent_dtdbvdfl,
CASE Facent_dtcrfa WHEN '0' THEN '' ELSE CONCAT('',19000000 + Facent_dtcrfa) END AS Facent_dtcrfa,
Facent_nommfa, Facent_comfgc, Facent_cotf, Facent_cotfse, Facent_cotfsp,
Facent_codv, Facent_txdv, Facent_txdvcc, Facent_inmrclcd, Facent_inmrcllv,
Facent_cobmgl, Facent_cobmbs, Facent_copatf, Facent_cosmtv, Facent_cofqfa,
Facent_norv, Facent_cotyrv, Facent_cofqrv, Facent_cotrda, Facent_cobqmo,
Facent_colg, Facent_txrmpd, Facent_coaprmpd, Facent_cotyrmpd,
CASE Facent_dttfcc WHEN '0' THEN '' ELSE CONCAT('',19000000 + Facent_dttfcc) END AS Facent_dttfcc,
Facent_comdrg, Facent_codtbs, Facent_codcdp, Facent_codrcr, Facent_dlrg,
Facent_codcav, Facent_nbehpm,
CASE Facent_dtbsrg WHEN '0' THEN '' ELSE CONCAT('',19000000 + Facent_dtbsrg) END AS Facent_dtbsrg,
CASE Facent_dtehfa WHEN '0' THEN '' ELSE CONCAT('',19000000 + Facent_dtehfa) END AS Facent_dtehfa,
Facent_inexcl, Facent_coic, Facent_coliic, Facent_cots, Facent_cosccm,
Facent_cotp, Facent_comytp, Facent_indmob, Facent_nodm, Facent_nmbq,
Facent_cobq, Facent_cogu, Facent_noctbq, Facent_noclrb, Facent_lbdm02,
Facent_lbdm03, Facent_lbdm04, Facent_mtbthtfa, Facent_mtbthtfaff, Facent_mtbthtfaeu,
Facent_mthtfa, Facent_mthtfaff, Facent_mthtfaeu, Facent_mtectcfaff, Facent_mtbsesfa,
Facent_mtbsesfaeu, Facent_mtesfa, Facent_mtesfaeu, Facent_mtbstvfa, Facent_mtbstvfaff,
Facent_mtbstvfaeu, Facent_mttvfa, Facent_mttvfaff, Facent_mttvfaeu, Facent_mttcfa,
Facent_mttcfaff, Facent_mttcfaeu, Facent_mtecfaeu, Facent_qtucfa, Facent_nbcifa,
Facent_nbplfa, Facent_nbplhofa, Facent_nbplhefa, Facent_vofa, Facent_pdbtfa,
Facent_pdntfa, Facent_infrpt, Facent_copt, Facent_pxpttf, Facent_mtpt,
Facent_cotvpt, Facent_txtvpt, Facent_inespt, Facent_mtpteu, Facent_coeb,
Facent_pxebtf, Facent_mteb, Facent_cotveb, Facent_txtveb, Facent_ineseb,
Facent_mtebeu, Facent_coas, Facent_pxastf, Facent_mtas, Facent_cotvas,
Facent_txtvas, Facent_inesas, Facent_mtaseu, Facent_coes, Facent_txes,
Facent_codvvt, Facent_codrvt, Facent_coscvt, Facent_core, Facent_nmre,
Facent_codt, Facent_cops, Facent_cocgcl, Facent_coceac, Facent_incmre,
Facent_inavri, Facent_cotraurf, Facent_mtntavrm, Facent_mtntavrmeu, Facent_inarfc,
Facent_datupd, Facent_timupd,
Faclig_coso, Faclig_nofc, Faclig_nolgfa, Faclig_nosslgfa, Faclig_nolgdcfa,
Faclig_nosslgdcfa, Faclig_cotylgfa,
CASE Faclig_dtfa WHEN '0' THEN '' ELSE CONCAT('',19000000 + Faclig_dtfa) END AS Faclig_dtfa,
Faclig_inlgkt, Faclig_inlges, Faclig_inlgedfa, Faclig_inlgst, Faclig_intrst,
Faclig_inlgri, Faclig_inlgajau, Faclig_inlgtx, Faclig_copr, Faclig_cova,
Faclig_covl, Faclig_lbpr, Faclig_coprcl, Faclig_coedqtpx, Faclig_qtpb,
Faclig_qtfalg, Faclig_qtcput, Faclig_pxsa, Faclig_pxsaeu, Faclig_cobtnt,
Faclig_pxbs, Faclig_pxbseu, Faclig_pxbt, Faclig_pxnt, Faclig_pxbteu,
Faclig_pxnthr, Faclig_pxnteu, Faclig_pxnthreu, Faclig_txpdcl, Faclig_coorpx,
Faclig_cotflg, Faclig_copm, Faclig_cotypm, Faclig_cobf, Faclig_comr,
Faclig_nbptpr, Faclig_copnpr, Faclig_unvtpr, Faclig_untfpr, Faclig_colgtf,
Faclig_inlgrm, Faclig_bthtfalg, Faclig_bthtfalgff, Faclig_bthtfalgeu, Faclig_mthtfalg,
Faclig_mthtfalgff, Faclig_mthtfalgeu, Faclig_mthtfalghr, Faclig_htfalghreu, Faclig_cofavt,
Faclig_cotydcfa, Faclig_nodcfa,
CASE Faclig_dtcrdcfa WHEN '0' THEN '' ELSE CONCAT('',19000000 + Faclig_dtcrdcfa) END AS Faclig_dtcrdcfa,
Faclig_nodcor, Faclig_cotydcorgc, Faclig_nocc,
CASE Faclig_dtcc WHEN '0' THEN '' ELSE CONCAT('',19000000 + Faclig_dtcc) END AS Faclig_dtcc,
Faclig_rfcccl,
CASE Faclig_dtlvshcc WHEN '0' THEN '' ELSE CONCAT('',19000000 + Faclig_dtlvshcc) END AS Faclig_dtlvshcc,
CASE Faclig_dtlvlmcc WHEN '0' THEN '' ELSE CONCAT('',19000000 + Faclig_dtlvlmcc) END AS Faclig_dtlvlmcc,
Faclig_cotycc, Faclig_txlgfa, Faclig_mtbstxlgfa, Faclig_cotv, Faclig_txtv,
Faclig_nbcifalg, Faclig_nbplfalg, Faclig_vofalg, Faclig_pdbtfalg, Faclig_pdntfalg,
Faclig_comrpr, Faclig_cofapr, Faclig_cogapr, Faclig_cosgpr, Faclig_corfpr,
Faclig_cotypr, Faclig_conaan, Faclig_coscan, Faclig_codp, Faclig_conask,
Faclig_codppc, Faclig_pxrvmv, Faclig_mtcmre, Faclig_txcmre, Faclig_intrcmre,
Faclig_nolo,
CASE Faclig_dtpr WHEN '0' THEN '' ELSE CONCAT('',19000000 + Faclig_dtpr) END AS Faclig_dtpr,
Faclig_datupd, Faclig_timupd,
Dtwart_cofocdpr, Dtwart_nmtr01
FROM
Facent
LEFT JOIN Faclig ON (
Faclig_coso = Facent_coso
AND Faclig_nofc = Facent_nofc
)
LEFT JOIN Dtwart ON (
Dtwart_coso = Faclig_coso
AND Dtwart_copr = Faclig_copr
)
LIMIT 30000
]

SI HExécuteRequêteSQL(reqFacture,CnxConnexionAS,hRequêteSansCorrection) ALORS

POUR TOUT reqFacture

// Même sans rien dans la boucle c'est lent

FIN

FIN

AnalyseurFin()






Merci d'avance.
Posté le 16 avril 2019 - 10:33
Tu devrais essayer un parcours HLitPremier/HlitSuivant avec l'option hSansRafraîchir (et dans ton cas peut être aussi hForwardOnly).

Qu'est ce qui te fait dire que le temps d'exécution de la requête n'est que de 40ms?
Il me semble que Windev rend la main alors que la requête n'est pas terminée. Pour être sur de ton coup, fait un hNbEnr() juste après le HExecuteRequêteSQL et là tu verras le temps réel d'exécution de ta requête.
Posté le 02 mai 2019 - 11:38
J'ai eu le même probleme avec une requête sous sql server utilisant un link server vers oracle.
Résolu en utilisant openquery. Le parcours du pour tout est instantané !

// Construction de la requete avec linkserver
lsQuery = "select * from openquery("+lsLinkedServerName+",'"+lsSelect+"')"

// execution et affichage
SI PAS HExécuteRequêteSQL(lsdResQuery,gscnxCRMConnexion,hRequêteSansCorrection,lsQuery) ALORS