Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour les PBadonfeurs,
Je travaillais sur une application développée en PowerBuilder 11.2 et oracle 10g.
J'avais un problème dans un traitement au niveau poste client, il m'est extrêmement difficile de lancer un traitement, plantage ..
La plupart du temps je n'y arrive pas, quand je lance le traitement, le poste client plante et je suis obligé de forcer sa fermeture, quelques fois j'y arrive après
attendu quelques bonnes minutes sans toucher à rien d'autre sur mon ordinateur.
J'ai ouvert l'application avec mes identifiants dans la session de quelqu'un d'autre, c'est pareil mais lui il n'avait pas le problème dans sa session !.
Le traitement que je parlais consiste à exécuter 4 requêtes sql (des selects) (4 datawindow) et je confirme que le temps de réponse de ces requêtes est assez longs.
Mais je ne trouvais pas une explication sur le problème (c'est parfois aléatoire !).
Avez-vous une piste pour investiguer s'il vous plaît ?
En vous remerciant
Dernière modification par mattdamon (24-11-2012 19:44:38)
Hors ligne
Toute idée sera la bienvenue
Hors ligne
Bonjour, tes requêtes ne seraient-elles pas victimes "aléatoirement" de locks ?
Hors ligne
Bonjour xlat,
Ce que j'ai remarqué après mes investigations :
- Il y des insertions dans les tables toutes les secondes ce qui ralentissent l'exécution de mes requêtes select. (d'où un lock oracle par ligne)
- Mes 4 requêtes select contiennent plusieurs jointures entre plusieurs tables dynamiques (minimum 100 lignes insérées chaque minute).
- Les 4 requêtes sont bien optimisées car les indexes sont bien créés et utilisés.
- Les paramètres de la bases sont ok.
- La collecte des statistiques est bien faite tous les jours.
- En mode debug, le plantage présente dans les 4 retrieve (4 requêtes select)
Je continue mes investigations mais je ne pense pas que puisse apporter quelques choses .. du coup, je suis dans le titanic
A+
Dernière modification par mattdamon (27-11-2012 22:01:54)
Hors ligne
Salut,
Ne raménerais tu pas trop de ligne sur ton poste client.
Une application Powerbuilder peut se fermer si tu ramènes trop de ligne lors des retrieve sur le poste client. Si celà étais le cas utilise plutot un datastore qu'une datawindow celà est moins gourmand.
Cdt
Yanis
Hors ligne
Yanis a écrit:
Salut,
Ne raménerais tu pas trop de ligne sur ton poste client.
Une application Powerbuilder peut se fermer si tu ramènes trop de ligne lors des retrieve sur le poste client. Si celà étais le cas utilise plutot un datastore qu'une datawindow celà est moins gourmand.
Cdt
Yanis
Salut Yanis,
Effectivement, mes requêtes ramènent trop de lignes ! ça peut-être ça l'origine du problème.
Dans ce cas, je vais modifier les datawindows par des datastores puis je fais rowscopy vers les datawindows...
Je vais faire ça et je te tiens informé.
Merci
A+
Hors ligne
Salut,
je ne comprend pas bien ce que tu vas faire. Si c'est pour lire toutes les ligne dans des datastores puis tu vas les recopier dans tes datawindows tu ne resoudra pas le problème au contraire tu vas doubler le nombre de ligne.
Cdt
Yanis
Hors ligne
Yanis a écrit:
Salut,
je ne comprend pas bien ce que tu vas faire. Si c'est pour lire toutes les ligne dans des datastores puis tu vas les recopier dans tes datawindows tu ne resoudra pas le problème au contraire tu vas doubler le nombre de ligne.
Cdt
Yanis
Salut Yanis,
Si j'ai bien compris ton idée, je vais faire retrieve dans des datastores puis je vais copier les lignes dans mes datawindows pour les afficher.
Pour info : J'ai 4 retrieves et chacun renvoient 25000 lignes, c'est trop de lignes non ?
Est-ce que c'est bien ça ce que tu veux dire ?
merci
A+
Dernière modification par mattdamon (01-12-2012 18:15:34)
Hors ligne
Salut,
J'ai une première question.
Est il important que tu ramènes 100 000 lignes sur le poste client ?
( Si c'est pour faire des aggrégats soit tu réussis à les faires au sein de ton ordre select, soit tu écris un procédure stockée, dans les deux tu n'auras que les lignes qui t'intéresse).
Pour l'utilisateur je ne vois pas trop l'intérêt de lui afficher 100 000 Lignes. Si c'est pour une édition c'est visiblement une grosse édition que tu fais car à raison d'une moyenne de 60 lignes par page tu es parti pour éditer 1500 pages ??????
Je pense qu'avant d'essayer de résoudre un problème comme tu as il serait bon de se poser la question sur la fonctionnalité attendue.
Cdt
Yanis
Hors ligne
Yanis a écrit:
Salut,
J'ai une première question.
Est il important que tu ramènes 100 000 lignes sur le poste client ?
( Si c'est pour faire des aggrégats soit tu réussis à les faires au sein de ton ordre select, soit tu écris un procédure stockée, dans les deux tu n'auras que les lignes qui t'intéresse).
Pour l'utilisateur je ne vois pas trop l'intérêt de lui afficher 100 000 Lignes. Si c'est pour une édition c'est visiblement une grosse édition que tu fais car à raison d'une moyenne de 60 lignes par page tu es parti pour éditer 1500 pages ??????
Je pense qu'avant d'essayer de résoudre un problème comme tu as il serait bon de se poser la question sur la fonctionnalité attendue.
Cdt
Yanis
Bonjour Yanis,
Concernant l'affichage d'un grand nombre des lignes c'est important à l'utilisateur pour pouvoir sélectionner certaines lignes pour la validation.
En fait, le problème se pose lorsque l'utilisateur ne met pas des critères de recherche (plage des dates, montant, etc ...). Peut-être t'as raison il faut que je fasse des contrôles supplémentaires sur les champs de critères pour que l'utilisateur renseigne tous les champs et aussi en faisant une recherche sur une plage des dates courtes (d'un jours par exemple)
Cordialement
Dernière modification par mattdamon (03-12-2012 19:19:09)
Hors ligne
Salut,
Dans ce genre de cas on a l'habitude de limiter le nombre de ligne ( ex :5000 : ou moins ou plus c'est selon chacun ) en lui affichant un message ou un texte lui indiquant que seules les 5000 premières lignes sont affichées. Et si l'utilisateur ne trouve pas ces infos il doit renseigner des critères afin d'affiner sa sélection.
Celà évite de ramener trop de ligne et que l'utilisateur puisse trouver rapidement ce qu'il recherche car dans 100000 lignes comment retrouver les lignes intérressantes .????
Cdt
Yanis
Hors ligne
Yanis a écrit:
Salut,
Dans ce genre de cas on a l'habitude de limiter le nombre de ligne ( ex :5000 : ou moins ou plus c'est selon chacun ) en lui affichant un message ou un texte lui indiquant que seules les 5000 premières lignes sont affichées. Et si l'utilisateur ne trouve pas ces infos il doit renseigner des critères afin d'affiner sa sélection.
Celà évite de ramener trop de ligne et que l'utilisateur puisse trouver rapidement ce qu'il recherche car dans 100000 lignes comment retrouver les lignes intérressantes .????
Cdt
Yanis
Bonjour Yanis,
Mais comment procéder pour limiter le nombre des lignes retourné par la requête à 5000 (par exp) ? est-ce possible de savoir le nombre des lignes avant d'exécuter la requête car l'exécution des requêtes qui posait le problème.
Merci d'avance
Hors ligne
Salut,
Il me semble qu'avec ORACLE c'est la syntaxe suivante :
Select col1, col2, col3 etc... From Table Where RowNum < Valeur
Cdt
Yanis
Hors ligne
Yanis a écrit:
Salut,
Il me semble qu'avec ORACLE c'est la syntaxe suivante :
Code: sql
Select col1, col2, col3 etc... From Table Where RowNum < Valeur
Cdt
Yanis
Bonjour Yanis,
C'est une très bonne solution. Je vais proposer ça à l'équipe fonctionnelle pour limiter les lignes à 1000/datawindow.
Désolé, j'étais en formation Java pendant une semaine pour cela j'ai tardé de clôturer le sujet.
A bientôt
Merci Yanis pour ton aide
Hors ligne