ich habe die Anforderung bekommen, einen uralten Report zu ergänzen.
Das Programm ist nicht sonderlich umfangreich, wirkt aber im Quellcode
durch SELECT / ENDSELECT-Schleifen und unübersichtliche Verarbeitung
der Selektionsergebnisse sehr aufgebläht.
Also habe ich das Programm neu geschrieben und habe mich dabei mit
Joins bei den Selects ausgetobt. Im Testsystem benötige ich nun 40% der Laufzeit...
Dann habe ich das Programm in das Produktivsystem importiert und war ernüchtert...
Mein Programm benötigt die 4-5 fache Laufzeit im Vergleich zum alten Programm
Im SQL-Trace (ST05) habe ich festgestellt, dass ein SQL-Statement unterschiedlich ausgeführt
wird. Nachfolgend ein paar Screenshots dazu.
Quellcode
- Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
- CLEAR ct_orders.
- SELECT vbap~vbeln vbap~posnr vbap~abgru vbap~matnr
- vbap~kwmeng vbap~vrkme vbap~ntgew vbap~gewei
- vbap~cuobj
- vbep~mbdat
- kna1~kunnr kna1~name1
- INTO CORRESPONDING FIELDS OF TABLE ct_orders
- FROM vbap
- INNER JOIN vbep
- ON vbep~vbeln = vbap~vbeln AND
- vbep~posnr = vbap~posnr
- INNER JOIN vbak
- ON vbak~vbeln = vbap~vbeln
- INNER JOIN kna1
- ON kna1~kunnr = vbak~kunnr
- WHERE vbap~vbeln IN s_vbeln
- AND vbap~matnr IN s_matnr
- AND vbap~abgru IN s_abgru
- AND vbep~etenr = '0001'.
- GeSHi ©
SQL-Statement im Trace
Ausführung im Testsystem ( Primärindex bei VBEP )
Ausführung im Produktivsystem ( Full-Table-Scan VBEP )
Was kann ich da tun? Oder bin ich abhängig von der Adminstration
Viele Grüße,
Oliver