|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
![]() ![]() Morgan BourgeoisInscription : août 2003 Messages : 1 730 ![]() |
Bonjour,
j'aimerais savoir si vous pourriez me conseiller sur de l'amélioration des perfs de requetes. Le but étant de reprendre un existant dont les requetes sont non optimisées, a tel point qu'une fois en prod c'est BOOM, request time out à chaque fois. JE vais vous mettre la premiere requete telle qu'elle était et ensuite ma première "correction" pour voir ce que vous en pensez: Code ABAP :
J'ai remplacé par : Code ABAP :
Je voudrais savoir ce que vous pensez de cette modif, si vous avez des conseils globaux ) me donner pour effectuer ce genre de boulot (l'optimisation), sachant qu'il reste encore une quantité importante de select disséminés dans le code. Merci de votre aide
__________________
---------------------------------------------------- Consultant technico-fonctionnel SAP logistique - Mon site sur developpez --------------------------------------------------- Anakin Skywalker turn to the Dark Side after his failed attempt to upgrade R/2-D2 to R/3-D2. |
||||
|
|
00
|
|
|
#2 |
|
Membre à l'essai
![]() Inscription : août 2006 Messages : 40 ![]() |
Bonjour cladsam,
Dans ce genre de requêtes, la première chose à faire est de regarder, quand la requête tourne, avec la transaction SM50, ce qui prend le plus de temps : - accès en lecture séquentiel sur une table, - accès répétés à la même table, Ensuite, en fonction de celà tu peux adapter le code. Ce que tu as fait est très bien :
Enfin, si le time out est trop court, lancer ces requêtes en arrière-plan. Très bonne journée et bon week-end de Pâques. Frooty |
|
|
00
|
|
|
#3 |
![]() ![]() Morgan BourgeoisInscription : août 2003 Messages : 1 730 ![]() |
Et bien c'est clair dans mon cas après quelques analyse, c'est les accès séquentiels ) MSEG qui prennent le plus soit environ 65% du temps total.
Ce n'ets pas peu dire ! Sachant cela, que me conseilleriez vous ?
__________________
---------------------------------------------------- Consultant technico-fonctionnel SAP logistique - Mon site sur developpez --------------------------------------------------- Anakin Skywalker turn to the Dark Side after his failed attempt to upgrade R/2-D2 to R/3-D2. |
|
|
00
|
|
|
#4 |
|
Membre expérimenté
![]() ![]() ![]() SAP for Banking Inscription : juin 2002 Messages : 539 ![]() |
Bonjour à vous,
En fait, la méthode d'analyse d'une requête repose sur principalement deux choses SM50 pour voir si elle tourne ou non, mais surtout ST05 pour faire une SQL Trace et ainsi analyser le SQL Plan. Attention cependant à l'utilisation de la table interne (ST02) pour ne pas faire déborder le cache. Ensuite, en accord avec la base de donnée, il faut plus ou moins adapter le nombre de COMMIT/ROLLOUT et la gestion du Update Task. En sachant que l'essentiel, en production est la définition même des Index et la configuration de la base de données elle-même. L.
__________________
TRY. N/A CATCH cx_root. |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() |
Bonjour,
Pr ma part, on m'a tjrs dit que les jointure sous SAP étaient loin d'être géniale concernant les performance. Mon chef de projet m'a expliqué qu'il est préférable, plutot que de faire des jointure, de faire : => des SELECT plus générale sur la BD sur les 2-3 ou X tables => et de travailler sur les tables internes (où en gros, on va faire comme des jointures dessus). Après, bien sur, il sagit de bien travailler, et de la bonne manière sur ces tables. Pr ma part, j'ai pu vérifier à plusieurs reprise qu'il avait raison. Maintenant, il vrai que ton optimisation à l'air bien meilleur que l'ancienne version. A toi de voir. Bonne journée. |
|
|
00
|
|
|
#6 | ||||||||
|
Membre du Club
![]() Inscription : mars 2007 Messages : 62 ![]() |
Bonjour. Voila les points que j'ai pu remarquer.
Citation:
Citation:
Code ABAP :
Bien sur tu peux aussi créer des index secondaires parfois plus adaptés que ceux par defaut. Enlever mandt de la requete cela ne sert pas vu que l'open SQL gère les requetes dans le mandant en cours. Une autre chose comme a dit Sh@m@n c'est parfois plus efficace d'utiliser pluseiurs requetes que de faire une jointure. Plus specialement pour les tables qui sont buffurisées. Pour savoir si une table est bufferisée SE11 -> technical data. |
||||||||
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() Inscription : septembre 2005 Messages : 164 ![]() |
Je ne sais pas si c'est réalisable mais a ta place je ferai une procédure stocké ^^. Ca fait un gros gros gain sur les base de donnée habituellement.
|
|
|
00
|
|
|
#8 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : mai 2003 Messages : 16 ![]() |
Salut,
on a eu le même souci au taf récemment, on a fini par faire des requêtes dans des tables internes directement comme dans ton exemple amélioré mais sans utiliser le FOR ALL ENTRIES Une fois mes différents select fait, on utilise un loop indexé afin de réunir les différentes données des deux tables dans une troisième table, les performances ont été pas mal amélioré en prod grâce à ça... Je te conseille aussi d'oublier les SELECT *, il faut absolument spécifier les champs que tu veux, tu passes de 200 colonnes+ à finalement une quinzaine de colonne maximum... Exemple : Code :
|
||
|
|
00
|
|
|
#9 |
![]() ![]() Morgan BourgeoisInscription : août 2003 Messages : 1 730 ![]() |
Merci
et merci a tous ceux qui m'ont apporté leur aide, mon gros problème finalement ne venait pas de la ... ne fois les accès MSEG effectués je me suis aperçu que le programme allait faire 5 select pour chaque article de la table sauf que : - le données des select était au niveau division et organisation - tous les articles de la table interne appartenaient a la meme division - il y avait en moyen 150 000 lignes dans la table interne a ce moment la donc en résumé : le programme faisait 5* 150 000 selects ou 5 aurait suffit ... après on vient me parler d'optimisation , moralité , le programme en question à pris la direction de la poubelle, comme il se doit
__________________
---------------------------------------------------- Consultant technico-fonctionnel SAP logistique - Mon site sur developpez --------------------------------------------------- Anakin Skywalker turn to the Dark Side after his failed attempt to upgrade R/2-D2 to R/3-D2. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com