Performance-Problem bei Aufruf einer SAP-Klasse


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

Performance-Problem bei Aufruf einer SAP-Klasse

Beitragvon xforce » 12.07.2018, 12:19

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
xforce
ForumUser
 
Beiträge: 3
Registriert: 12.07.2018, 11:33
Dank erhalten: 0 mal

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Performance-Problem bei Aufruf einer SAP-Klasse

Beitragvon a-dead-trousers » 12.07.2018, 12:49

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.
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

Für diese Nachricht hat a-dead-trousers einen Dank bekommen :
Legxis
a-dead-trousers
Top Expert
 
Beiträge: 3056
Registriert: 07.02.2011, 13:40
Dank erhalten: 756 mal
Ich bin: Entwickler/in

Re: Performance-Problem bei Aufruf einer SAP-Klasse

Beitragvon DeathAndPain » 15.07.2018, 00:00

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.

Für diese Nachricht hat DeathAndPain einen Dank bekommen :
Legxis
DeathAndPain
Expert
 
Beiträge: 778
Registriert: 05.05.2006, 10:14
Dank erhalten: 175 mal
Ich bin: Entwickler/in

Re: Performance-Problem bei Aufruf einer SAP-Klasse

Beitragvon zzcpak » 16.07.2018, 08:40

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.

Für diese Nachricht hat zzcpak einen Dank bekommen :
Legxis
zzcpak
Expert
 
Beiträge: 588
Registriert: 29.07.2003, 15:10
Dank erhalten: 48 mal

Re: Performance-Problem bei Aufruf einer SAP-Klasse

Beitragvon xforce » 16.07.2018, 10:16

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
xforce
ForumUser
 
Beiträge: 3
Registriert: 12.07.2018, 11:33
Dank erhalten: 0 mal

Re: Performance-Problem bei Aufruf einer SAP-Klasse

Beitragvon xforce » 28.08.2018, 09:00

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
xforce
ForumUser
 
Beiträge: 3
Registriert: 12.07.2018, 11:33
Dank erhalten: 0 mal


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
Positionstypenverwendung im SD
vor 4 Minuten von SAP_ENTWICKLER 2 Antw.
Hilfe bei SQL Join
vor 10 Stunden von deejey 1 Antw.
Hilfe bei SQL Join
vor 17 Stunden von moo_jo 0 Antw.
LISTBOX: SELECTION-SCREEN
vor 2 Stunden von ewx 3 Antw.
Eine Message in der Taskleiste von alv ausgeben
vor 20 Stunden von ewx 4 Antw.

  Ähnliche Beiträge beta
Export einer Klasse
15.08.2007, 15:19 von JetGum 0 Antw.
Merkmalgruppierung einer Bewertung zur Klasse auslesen
28.11.2016, 14:56 von Andy1984 2 Antw.
Aufruf einer Transaktion im neuen Fenster?
19.08.2008, 12:09 von piemo 2 Antw.
Aufruf eines FBs mit einer Struktur als Importparameter
10.07.2012, 08:10 von a-dead-trousers 5 Antw.
dynamische Klasse
03.11.2005, 08:58 von ThomasK 6 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot]

cron