Performance-Problem

Getting started ... Alles für einen gelungenen Start.
71 Beiträge • Vorherige Seite 5 von 5 (current)
71 Beiträge Vorherige Seite 5 von 5 (current)

Re: Performance-Problem

Beitrag von gtoXX (Specialist / 213 / 44 / 36 ) »
Ich würde schon mal schauen, ob du dein "gt_output" aus T023T , T024D und mvke nicht aus einem Join oder Subquery ermitteln kannst, gerade mvke böte sich an. Auch für MSEG MKPF gilt das.
Desweiteren machst Du immer Select * auf die Hilfstabellen, obwohl Du nur 1 Feld brauchst.

Die Hilsvariablen gs_t023t usw sind vollkommen überflüssig. Du kannst auch direkt in <gs_output>-wgbez selektieren, wenn es schon so sein soll.

Desweiteren würde ich keine Selektionsbedingungen mit '1000' codieren. Wenn es schon mangels Selektionsbild nicht anders geht, dann wenigstens als Konstante im Header,
damit man nicht 10 Codestellen ändern muss. Ich würde allerdings immer ein Selektionsbild machen, im Zweifel mit unsichtbaren Selektionsoptionen.

Das nur mal so als Anfang.
"Code lügt nicht ^^"

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Performance-Problem

Beitrag von black_adept (Top Expert / 4086 / 126 / 940 ) »
cuncon,

wenn den Programm auf dem Produktivsystem 90 Minuten läuft kannst du es nicht durch die SAT jagen um zu schauen wo deine Probleme liegen. Aber hast du evtl. die Möglichkeit auf dem Selektionsbild die zu verarbeitende Datenmenge drastisch zu reduzieren, so dass du auf Laufzeiten im unteren einstelligen Minutenbereich kommst. Vielleicht mal einschränken auf 3 Materialien,so dass du schon an deinem Progressindikator erkennst, dass das Problemfälle sind. Und dann mach eine Laufzeitanalyse von diesen wenigen Materialien (das ist aussagekräftig genug) und berichte dann davon statt uns immer nur raten zu lassen wo denn genau den Problem liegt.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Performance-Problem

Beitrag von Hastalavista (ForumUser / 7 / 0 / 0 ) »
Hallo zusamen,

ich stehe gerade auf dem Schlauch und komme nicht weiter. Ich muss anhand der Liegezeit (Selektionsbild) ermitteln, wie lange das Material seit dem Wareneingang dort liegt. Nun aber habe ich Probleme mit der Performance. Was mache ich falsch, dass bei 200 Materialien eine Ewigkeit dauert bis er Daten gelesen hat?

Code: Alles auswählen.

    SELECT T1~MBLNR T1~MJAHR T1~BUDAT T2~MATNR T2~CHARG T2~SHKZG
           INTO TABLE GT_MKPF
           FROM MKPF AS T1 INNER JOIN MSEG AS T2
                ON T1~MBLNR EQ T2~MBLNR  AND
                   T1~MJAHR EQ T2~MJAHR
           WHERE T1~BUDAT IN LR_LGZEIT
           AND   T2~MATNR IN SO_MATNR
           AND   T2~WERKS IN SO_WERKS
           AND   T2~CHARG IN SO_CHARG .
Freue mich auf die Tipps!

Re: Performance-Problem

Beitrag von DeathAndPain (Top Expert / 1939 / 257 / 412 ) »
Also was mir sofort auffällt, ist, dass Deine Tabellen verdreht zu sein scheinen. Du selektierst doch eigentlich anhand Deiner Selektionsparameter über die MSEG und willst dann noch ergänzende Werte aus der MKPF dazu haben. Warum schreibst Du dann "FROM MKPF INNER JOIN MSEG" anstatt "FROM MSEG INNER JOIN MKPF"? Da fängt die Datenbank vermutlich über die MKPF an zu suchen, hat dort aber außer dem Buchungsdatum kein Feld, das sie zur Einschränkung nutzen kann, und wenn Du den Buchungsdatum-Selektionsparameter gar nicht gefüllt hast, hat sie gar nichts.

Dass Du Dir das in Deinem Kopf anders gedacht hast, ist auch daran erkennbar, dass Du im JOIN-Block die Felder der von Dir gejointen Tabelle auf die rechte statt die linke Seite des Gleichheitszeichens geschrieben hast. Mathematisch egal, aber es deutet aus meiner Sicht auf mangelnde Konsequenz hin, und ich bin auch nicht sicher, wie die Datenbank damit umgeht.

Ich würde es mal mit

Code: Alles auswählen.

    SELECT T1~MBLNR T1~MJAHR T1~BUDAT T2~MATNR T2~CHARG T2~SHKZG
           INTO TABLE GT_MKPF
           FROM MSEG AS T2 INNER JOIN MKPF AS T1
                ON T1~MBLNR EQ T2~MBLNR  AND
                   T1~MJAHR EQ T2~MJAHR
           WHERE T1~BUDAT IN LR_LGZEIT
           AND   T2~MATNR IN SO_MATNR
           AND   T2~WERKS IN SO_WERKS
           AND   T2~CHARG IN SO_CHARG .
versuchen. Dann ist natürlich auch noch die Frage, welche Selektionsparameter Du in Deinem Lauf reingesteckt hast, um Deine 200 Materialien zu finden.

Re: Performance-Problem

Beitrag von Hastalavista (ForumUser / 7 / 0 / 0 ) »
Hi DeathAndPain,

also folgende Paramater sind gefüllt:

LR_LGZEIT => ist gefüllt z.B. 20170131 - sy-datum
SO_MATNR => ist gefüllt z.B. 200 Test-Materialien
SO_WERKS => ist gefüllt
SO_CHARG => nicht gefüllt.

Re: Performance-Problem

Beitrag von Hastalavista (ForumUser / 7 / 0 / 0 ) »
DeathAndPain hat geschrieben:Also was mir sofort auffällt, ist, dass Deine Tabellen verdreht zu sein scheinen. Du selektierst doch eigentlich anhand Deiner Selektionsparameter über die MSEG und willst dann noch ergänzende Werte aus der MKPF dazu haben. Warum schreibst Du dann "FROM MKPF INNER JOIN MSEG" anstatt "FROM MSEG INNER JOIN MKPF"? Da fängt die Datenbank vermutlich über die MKPF an zu suchen, hat dort aber außer dem Buchungsdatum kein Feld, das sie zur Einschränkung nutzen kann, und wenn Du den Buchungsdatum-Selektionsparameter gar nicht gefüllt hast, hat sie gar nichts.

Dass Du Dir das in Deinem Kopf anders gedacht hast, ist auch daran erkennbar, dass Du im JOIN-Block die Felder der von Dir gejointen Tabelle auf die rechte statt die linke Seite des Gleichheitszeichens geschrieben hast. Mathematisch egal, aber es deutet aus meiner Sicht auf mangelnde Konsequenz hin, und ich bin auch nicht sicher, wie die Datenbank damit umgeht.

Ich würde es mal mit

Code: Alles auswählen.

    SELECT T1~MBLNR T1~MJAHR T1~BUDAT T2~MATNR T2~CHARG T2~SHKZG
           INTO TABLE GT_MKPF
           FROM MSEG AS T2 INNER JOIN MKPF AS T1
                ON T1~MBLNR EQ T2~MBLNR  AND
                   T1~MJAHR EQ T2~MJAHR
           WHERE T1~BUDAT IN LR_LGZEIT
           AND   T2~MATNR IN SO_MATNR
           AND   T2~WERKS IN SO_WERKS
           AND   T2~CHARG IN SO_CHARG .
versuchen. Dann ist natürlich auch noch die Frage, welche Selektionsparameter Du in Deinem Lauf reingesteckt hast, um Deine 200 Materialien zu finden.
Habe es jetzt auch mal die Richtung versucht, aber dauert genau so lange.

Re: Performance-Problem

Beitrag von DeathAndPain (Top Expert / 1939 / 257 / 412 ) »
Vielleicht ist es ein releaseabhängiges Thema: Auf meinem 7.50-System gibt es auf der MSEG einen Index M: MANDT/MATNR/WERKS/LGORT/BWART/SOBKZ. Dieser Index wurde zuletzt am 22.11.2016 von der SAP geändert. Vielleicht hast Du ein älteres Release, bei dem dieser Index noch nicht da ist? Der wäre für Deinen SELECT offensichtlich wichtig.

In dem Fall könnest Du den Index ja manuell anlegen. Wenn Du Lust hast, sogar mit der Indexkennung "M". Wenn ihr später ein Releaseupgrade macht, wird die als Modifikation im SPAU-Abgleich hochkommen, und dann könnt ihr einfach auf den Standard zurückgehen, in dem dieser Index ja dann genau so vorhanden sein wird.

Aber das ist natürlich Spekulation von mir und haut nur hin, wenn es diesen Index auf Deinem System noch nicht gibt. Einen anderen Grund, weshalb Dein SELECT nicht performant sein sollte, kann ich freilich nicht erkennen.

Re: Performance-Problem

Beitrag von Hastalavista (ForumUser / 7 / 0 / 0 ) »
Auch auf dem 7.0-System gibt es den Index in der MSEG. Die letzte Änderung von SAP war am 01.02.2014, mit den gleichen Indexfeldern die du gennant hast.

Trotzdem Danke! ;)

Re: Performance-Problem

Beitrag von DeathAndPain (Top Expert / 1939 / 257 / 412 ) »
Wenn Du anders nicht weiter kommst, dann würde ich an Deiner Stelle den JOIN auflösen, erst einen SELECT in eine interne Tabelle machen und darüber dann den 2. SELECT lesen (aus Performancegründen möglichst nicht mit LOOP + SELECT SINGLE, sondern mit SELECT FOR ALL ENTRIES IN). Dann musst Du in Deinem Programm allerdings eine Fallunterscheidung machen, welche Selektionskriterien ver Benutzer versorgt hat, und anhand dessen dann entscheiden, mit welcher der beiden Datenbanktabellen Du zu lesen anfängst, um einen Index nutzen zu können. Du brauchst dann also zwei verschiedene Einleseroutinen.

Seltsam ist es aber trotzdem.

Re: Performance-Problem

Beitrag von Hastalavista (ForumUser / 7 / 0 / 0 ) »
Hi DeathAndPain,

vielen Dank für den Tipp, habe den Select getrennt und nach BWART (Bewegungsart) eingerenzt. Läuft definitiv viel schneller.

Re: Performance-Problem

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Hastalavista hat geschrieben:Hi DeathAndPain,

vielen Dank für den Tipp, habe den Select getrennt und nach BWART (Bewegungsart) eingerenzt. Läuft definitiv viel schneller.
Tach.

In der MSEG findest Du das Buchungsdatum ebenfalls als "BUDAT_MKPF". Wenn ich das richtig sehe müsstest Du damit mit der MSEG alleine auskommen und brauchst die MKPF gar nicht.

Grüße,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Vergleichbare Themen

14
Antw.
2900
Views
Performance Problem
von ChrissixD » 26.09.2017 09:13 • Verfasst in ABAP® für Anfänger
2
Antw.
1226
Views
Performance Problem
von ChrissixD » 21.11.2017 07:49 • Verfasst in ABAP® für Anfänger
18
Antw.
6899
Views
Performance-Problem bei SELECT
von Charadin » 22.10.2007 08:10 • Verfasst in ABAP® Core
8
Antw.
4552
Views
Speicher & Performance Problem bei XML einlesen
von Zubasa » 15.06.2011 13:48 • Verfasst in ABAP® für Anfänger
5
Antw.
3334
Views
Performance-Problem bei Aufruf einer SAP-Klasse
von xforce » 12.07.2018 13:19 • Verfasst in ABAP® für Anfänger

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 21 Stunden von Bright4.5 1 / 479
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2124
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8718