Performance-Probleme

Benutzeroberflächen in SAP®-Systemen.
33 Beiträge • Vorherige Seite 3 von 3 (current)
33 Beiträge Vorherige Seite 3 von 3 (current)

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
MarkusW hat geschrieben: nur mal so zur Info...die ganzen Select-options Felder sind zwar da, aber müssen nicht unbedingt zum eingrenzen benutzt werden.

Mussfelder sind (derzeit, das ändert sich solange bis sich der Keyuser mal entscheiden kann) :
Die Mussfelder steuern den Weg des Selects. Je genauer eingerenzt wird, desto schneller der Select. Ihr solltet euch auf einen Beleg einigen, der möglichst genau eingegrenzt werden muss/kann. Idealerweise ergeben die Mussfelder einen Index für den ersten Slecet (bzw. Join). Über diesen Beleg werden dann die abhängingen Belege/Daten gelesen.
Teste dies mit dem Beispielreport aus dem vorherigem Post. Grenze möglichst genau auf Aufträge ein une einmal möglichst genau auf Lieferung.
Gruß Hendrik

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


Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Hallo Hendrik,

werde deine Programmcodings mal ausprobieren.

Zu den Selectionen. Es wurde lange drüber diskutiert und die MUSS-Selektionen sind Auftraggeber(VBAK-KUNNR) und Lieferscheinerzeugungsdatum(LIKP-ERDAT). Da kann nicht dran gerüttelt werden.
Die wollen ja als Ergebnis wissen, welche Aufträge kamen rein, wurden verarbeitet, versendet und fakturiert (also Rechnung geschrieben). Das für einen Zeitraum. Die wissen in dem Fall gar nicht was als Ergebnis kommt...naja relativ wissen Sie es schon, nachdem se mal gegenprüfen anhand den Tabellen.

Habe auch eine Lösung geschafft die zeitlich im Rahmen liegt, ich finds recht unschön und bin mir sicher das da noch Zeit rauszuholen ist (wie schon gsagt, werde deine Codings noch testen), aber erstmal läufts ;)

Hier das Coding von mir: (bitte nicht schlagen, ich weiß jede menge Corresponding Fields...werde das noch ausbessern ;) versprochen )

Code: Alles auswählen.

FORM select_data .

  DATA:
        lf_vbfavbeln        TYPE vbeln_von,
        lf_anzi             TYPE i,
        lf_anzs             TYPE string.


  CLEAR: gt_llief, gs_llief.

  SELECT a~vbeln a~erdat a~wadat_ist
         b~lfimg b~vgbel b~vgpos
    INTO TABLE gt_llief
    FROM likp AS a INNER JOIN lips AS b
           ON a~vbeln = b~vbeln
   WHERE a~vbeln     IN so_lbeln
     AND a~erdat     IN so_lerda
     AND a~wadat_ist IN so_lwati
     AND b~lfimg     IN so_lfimg.


  LOOP AT gt_llief INTO gs_llief.

    CLEAR gs_vbak.
    SELECT vbeln erdat kunnr auart vkbur vkorg vtweg
      FROM vbak
      INTO CORRESPONDING FIELDS OF gs_vbak
     WHERE vbeln     =  gs_llief-vgbel
       AND kunnr     IN so_kunnr
       AND erdat     IN so_erdat
       AND auart     IN so_auart
       AND vkbur     IN so_vkbur
       AND vkorg     IN so_vkorg
       AND vtweg     IN so_vtweg.
      IF sy-subrc <> 0.
        CONTINUE.
      ENDIF.

      CLEAR gs_vbap.
      SELECT vbeln posnr matnr arktx kwmeng netwr uepos
        FROM vbap
        INTO CORRESPONDING FIELDS OF gs_vbap
       WHERE vbeln     = gs_llief-vgbel
         AND posnr     = gs_llief-vgpos
         AND matnr     IN so_matnr
         AND uepos     IN so_uepos
         AND arktx     IN so_arktx
         AND netwr     IN so_netwr
         AND kwmeng    IN so_kwmen.
        IF sy-subrc <> 0.
          CONTINUE.
        ENDIF.

        CLEAR gs_vbfa.
        SELECT SINGLE *
          INTO gs_vbfa
          FROM vbfa
         WHERE vbelv = gs_vbap-vbeln
           AND posnv = gs_vbap-posnr
           AND vbtyp_n = 'M'.
        IF sy-subrc = 0.
          lf_vbfavbeln = gs_vbfa-vbeln.

          CLEAR gs_vbrk.
          SELECT SINGLE vbeln erdat
            INTO CORRESPONDING FIELDS OF gs_vbrk
            FROM vbrk
           WHERE vbeln = lf_vbfavbeln
             AND vbeln IN so_rbeln
             AND erdat IN so_rerda.
          IF sy-subrc EQ 0.
            CLEAR gs_vbkd.
            SELECT SINGLE bzirk
              FROM vbkd
              INTO CORRESPONDING FIELDS OF gs_vbkd
             WHERE vbeln   = gs_vbap-vbeln
               AND posnr   = gs_vbap-posnr
               AND bzirk   IN so_bzirk.

            gs_all-baauart     = gs_vbak-auart.
            gs_all-bavbeln     = gs_vbak-vbeln.
            gs_all-baerdat     = gs_vbak-erdat.
            gs_all-ipvbeln     = gs_llief-vbeln.
            gs_all-iperdat     = gs_llief-erdat.
            gs_all-ipwadat_ist = gs_llief-wadat_ist.
            gs_all-brvbeln     = gs_vbrk-vbeln.
            gs_all-brerdat     = gs_vbrk-erdat.
            gs_all-bakunnr     = gs_vbak-kunnr.
            gs_all-bavkbur     = gs_vbak-vkbur.
            gs_all-bavkorg     = gs_vbak-vkorg.
            gs_all-bavtweg     = gs_vbak-vtweg.
            gs_all-bpmatnr     = gs_vbap-matnr.
            gs_all-bparktx     = gs_vbap-arktx.
            gs_all-bpkwmeng    = gs_vbap-kwmeng.
            gs_all-islfimg     = gs_llief-lfimg.
            gs_all-bpnetwr     = gs_vbap-netwr.
            gs_all-bpuepos     = gs_vbap-uepos.
            gs_all-bdbzirk     = gs_vbkd-bzirk.

            APPEND gs_all TO gt_all.

            CLEAR gs_all.

          ELSE.
            CONTINUE.
          ENDIF.
        ELSE.
          CONTINUE.
        ENDIF.

      ENDSELECT.
    ENDSELECT.
  ENDLOOP.

* Festhalten wieviel korrekte Treffer gefunden wurden
* Ausgabe in der obersten Zeile des Ausgabedynpros (Dynpro 200)
  DESCRIBE TABLE gt_all LINES lf_anzi.
  lf_anzs = lf_anzi.

  CONCATENATE gc_info lf_anzs gc_info2
         INTO txt_info
    SEPARATED BY space.

ENDFORM.                    " select_data

Ausführungsdauer hat sich gegenüber dem MEGAJOIN enorm gebessert:
Megajoin: >25min. 1 Treffer.
aktueller Code: < 5min. 51 Treffer.
Bei gleichen Auswahlkritierien. Aber mit besserem Ergebnis ;) Plausibilität muss der Keyuser testen ;P

(Alles auf dem Testsystem. Datenstand gleicht zu 99% dem Produktiv)

Gruß
Markus

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Hallo Hendrik,

das kommt bei deinen Codings raus:

Code: Alles auswählen.

JOIN 1                             
Anzahl gelesener Sätze:          0 
Dauer:  1.653.167                  
                                   
FOR ALL ENTRIES                    
Anzahl gelesener Sätze:          0 
Dauer: 2145051033                  
Wie rechnet man das um?
Startzeit war ca. 16:23
Ende war ca. 16:35

Die zahlen sind doch immer Millisekunden dachte ich...wenn ich das umrechne kommen da aber beim Join 27min raus und bei 'ALL ENTRIES' 415 und mehr minuten.

bin zu doof zum umrechnen :cry:

Aber als entschuldigung...muss die Arbeit von 3 Leuten machen..Urlaub bzw. Krank...so ein Glück am Montag wah... :roll:

Gruß
Markus

Vergleichbare Themen

0
Antw.
1132
Views
performance probleme mit V_V2
von slim » 24.02.2006 14:00 • Verfasst in Sales and Distribution
0
Antw.
1738
Views
3
Antw.
2614
Views
Performance von INE vs. EEQ
von Birdy » 14.08.2013 11:35 • Verfasst in ABAP® für Anfänger
2
Antw.
2058
Views
SQL und Performance
von Hagbard » 24.11.2005 08:51 • Verfasst in ABAP® für Anfänger
3
Antw.
2810
Views
Performance
von SAP_ENTWICKLER » 19.02.2018 07:06 • Verfasst in SAP HANA 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

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2452
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9038