Performance-Problem bei Aufruf einer SAP-Klasse

Getting started ... Alles für einen gelungenen Start.
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Performance-Problem bei Aufruf einer SAP-Klasse

Beitrag von xforce (ForumUser / 3 / 0 / 0 ) »
Hallo zusammen,

ich hoffe auf Hilfe bei meinem Problem; Performance-Probleme wurden sicher schon des Öfteren behandelt, aber ich habe aus meiner Sicht so ziemlich alles versucht was machbar ist.

Generell geht es darum, dass ich aus einer Tabelle DSWP_BPM_ALERTS (Business Process Monitoring alerts) Werte in eine interne Tabelle selektiere; dies klappt soweit auch ohne Probleme:

select * from DSWP_BPM_ALERTS into TABLE it_bpm_alerts where
DSWP_BPM_ALERTS~ADATE in so_date and
DSWP_BPM_ALERTS~alert in so_alert and
DSWP_BPM_ALERTS~sessno in so_sess and
DSWP_BPM_ALERTS~sid in so_sid.

Anschließend wird ein Loop über die interne Tabelle ausgeführt und mittels des Aufrufs einer Klasse werden zusätzliche Daten ermittelt und in die Ergebnistabelle
geschrieben:

loop at it_bpm_alerts into lv_bpm_alerts.

CALL METHOD CL_AGS_BPM_OPERATIONS=>GET_ALERTTYPE_CONTEXT
EXPORTING
IV_SOLUTION = lv_bpm_alerts-solution
IV_MONID = lv_bpm_alerts-monid
IV_ALERTTYPE = lv_bpm_alerts-alerttype
IMPORTING
EV_MONOBJNAME = lv_result-MONOBJNAME
ET_CONTEXTS = lt_context.

select single text from DSWP_BPM_MONIDS into lv_result-ALERTTYPEDESCR where
monid = lv_bpm_alerts-monid.

read TABLE lt_context index 1 into lv_context.

lwa_result-POBJECT_NAME = lv_context-PROCESS_DESCR.
lwa_result-SOBJECT_NAME = lv_context-STEP_DESCR.
lwa_result-BUSISCENARIO_NAME = lv_context-SCENARIO_DESCR.
lwa_result-SOLUTION_NAME = lv_context-SOLUTION_DESCR.
lwa_result-RATING = lv_bpm_alerts-rating.
lwa_result-ATEXT = lv_bpm_alerts-atext.
lwa_result-AL_MEAS_VALUE = lv_bpm_alerts-al_meas_value.
lwa_result-SID = lv_bpm_alerts-SID.
lwa_result-CLIENT = lv_bpm_alerts-mandt.
lwa_result-adate = lv_bpm_alerts-adate.
lwa_result-atime = lv_bpm_alerts-atime.

append lv_result to lt_result.

endloop.

Ich habe hier auch einmal eine Laufzeitanalyse mit der Transaktion SAT durchgeführt und das Ergebnis war, dass die Datenbank für 99% der sehr langen Laufzeit erforderlich ist; bei einer Einschränkung auf ca. 1200 Datensätze dauert es ca. 20 Minuten bis die Auswertung abgeschlossen ist und das Ergebnis in der ALV-Liste angezeigt wird. Man kann sich vorstellen wie lange es dauert wenn es 10x so viele Datensätze sind.

Ich habe aus der Laufzeitanalyse den Eindruck gewonnen, dass die Klassenschnittstelle CL_AGS_BPM_OPERATIONS=>GET_ALERTTYPE_CONTEXT für die überlange Laufzeit verantwortlich ist und sehe hier nur wenig Optimierungspotential.

Ich habe im Programmcode selbst versucht die Auswertung zu beschleunigen indem ich bspw. ein Feldsymbol anstelle der work-area verwendet habe, aber die Laufzeit hat sich dadurch kaum verbessert.

Vielleicht sehe ich gerade den Wald vor lauter Bäumen nicht; ich bin jedenfalls für jede Hilfe dankbar.

LG,

Alex


Re: Performance-Problem bei Aufruf einer SAP-Klasse

Beitrag von a-dead-trousers (Top Expert / 3592 / 124 / 934 ) »
Mach z.B. mit der ST05 einen SQL-Trace und schau dir an welche Tabellen die Methode CL_AGS_BPM_OPERATIONS=>GET_ALERTTYPE_CONTEXT abfragt. Eventuell kannst du ja auch das Ergebnis der SAT verwenden und nur die Tabellen prüfen welche die meiste (verdichtete) Laufzeit verbrauchen.
Direkt in der ST05 kannst du dir dann das Ergebnis und den Ausführungsplan der Query anzeigen lassen. Da kannst du dann sehen, dass vermutlich ein "Full Table Scan" ausgeführt wird. Das ist für so ziemlich jede Datenbank der Super-Gau. Wenn das der Fall ist, solltest du für die betroffenen Tabellen einen Tabellenindex (im Z-Namensraum) anlegen der möglichst viele Felder deiner Abfrage enthält. Damit sollten sich solche "Langläufer" um den Faktor 10 verringern lassen.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Legxis

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Performance-Problem bei Aufruf einer SAP-Klasse

Beitrag von DeathAndPain (Top Expert / 1492 / 165 / 336 ) »
Ansonsten gilt auch der Grundsatz, dass SAP-Methoden und Funktionsbausteine immer langsam sind, da sie viel mehr Daten ermitteln, als man tatsächlich braucht (siehe Dein READ TABLE INDEX 1) und das auch noch ineffizient. Von daher kannst Du auch schauen, ob Du die Methode nicht weglassen und die benötigten Daten selbst per SELECT direkt aus der Datenbank lesen kannst. Häufig ist das mit einem Bruchteil der Laufzeit möglich. Dabei kann auch wieder die von adt erwähnte ST05 hilfreich sein, da Du dort siehst, was die SAP liest. So findest Du die benötigten Datenbanktabellen und -spalten und kannst den Zugriff für Deine Zwecke optimieren und selbst ausführen.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
Legxis


Re: Performance-Problem bei Aufruf einer SAP-Klasse

Beitrag von zzcpak (Expert / 673 / 5 / 66 ) »
Bei Performance-Problemen mit SAP-Standard-Coding lohnt eigentlich immer eine Suche nach entsprechenden SAP Notes.
Bei der Suche nach "CL_AGS_BPM_OPERATIONS=>GET_ALERTTYPE_CONTEXT" werden auch gleich zwei Notes genannt, die ggfs. interessant sein könnten. Allerdings betreffen beide Solman 710.

Gerade für Komonente ST hat man häufig den Eindruck, da wird vieles schnell hingeschmuddelt und entsprechen häufig gibt dann Korrekturen via SAP Note.

Folgende Benutzer bedankten sich beim Autor zzcpak für den Beitrag:
Legxis


Re: Performance-Problem bei Aufruf einer SAP-Klasse

Beitrag von xforce (ForumUser / 3 / 0 / 0 ) »
Hallo zusammen,

ich danke euch für eure Antworten und werde mich damit auseinandersetzen und prüfen, womit sich das Problem am besten lösen lässt.

Sobald ich das Problem gelöst habe, gebe ich die Lösung auch hier bekannt.

Danke nochmals und lG,

Alex

Re: Performance-Problem bei Aufruf einer SAP-Klasse

Beitrag von xforce (ForumUser / 3 / 0 / 0 ) »
Hallo zusammen,

nochmals vielen Dank für eure Hilfe.

Ich habe mit Hilfe eurer Tips die Performance deutlich verbessern können.
Es ist gegenwärtig noch etwas geplant, was die Performance evtl. noch etwas steigert.

Nach Abschluß der Arbeiten werde ich meinen Lösungsweg hier vorstellen.

Danke nochmals und lG,

Alex

Seite 1 von 1

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Vergleichbare Themen

Performance-Problem
von cuncon » 27.02.2018 07:41
Performance Problem
von ChrissixD » 21.11.2017 07:49
Performance Problem
von ChrissixD » 26.09.2017 09:13
Aufruf von BAPI_PRODORD_CREATE_FROM_PLORD aus einer Klasse - Shortdump
von Anne_A » 03.03.2020 15:56
Performance-Problem bei SELECT
von Charadin » 22.10.2007 08:10