SAP---ABAP

Thursday, February 7, 2008

Performance tuning

You need to consider below points to improve the performance of any program you write. Any one can write the program, but credit goes to one who writes efficiently. Performance plays key role for reports, BDCs.

  • For all entries
  • Nested selects
  • Select using JOINS
  • Use the selection criteria
  • Use the aggregated functions
  • Select with view
  • Select with index support
  • Select … Into table
  • Select with selection list
  • Key access to multiple lines
  • Copying internal tables
  • Modifying a set of lines
  • Deleting a sequence of lines
  • Linear search vs. binary
  • Comparison of internal tables
  • Modify selected components
  • Appending two internal tables
  • Deleting a set of lines
  • Tools available in SAP to pin-point a performance problem
  • Optimizing the load of the database


For all entries

The for all entries creates a where clause, where all the entries in the driver table are combined with OR. If the number of entries in the driver table is larger
than rsdb/max_blocking_factor, several similar SQL statements are executed to limit the length of the WHERE clause.

The plus

Large amount of data
Mixing processing and reading of data
Fast internal reprocessing of data
Fast
The Minus

Difficult to program/understand
Memory could be critical (use FREE or PACKAGE size)
Some steps that might make FOR ALL ENTRIES more efficient:

Removing duplicates from the the driver table
Sorting the driver table
If possible, convert the data in the driver table to ranges so a BETWEEN statement is used instead of and OR statement:
FOR ALL ENTRIES IN i_tab
WHERE mykey >= i_tab-low and
mykey <= i_tab-high.

Nested selects

The plus:

Small amount of data
Mixing processing and reading of data
Easy to code - and understand
The minus:

Large amount of data
when mixed processing isn’t needed
Performance killer no. 1

Select using JOINS

The plus

Very large amount of data
Similar to Nested selects - when the accesses are planned by the programmer
In some cases the fastest
Not so memory critical
The minus

Very difficult to program/understand
Mixing processing and reading of data not possible

Use the selection criteria

SELECT * FROM SBOOK.
CHECK: SBOOK-CARRID = 'LH' AND
SBOOK-CONNID = '0400'.
ENDSELECT.
SELECT * FROM SBOOK
WHERE CARRID = 'LH' AND
CONNID = '0400'.
ENDSELECT.

Use the aggregated functions

C4A = '000'.
SELECT * FROM T100
WHERE SPRSL = 'D' AND
ARBGB = '00'.
CHECK: T100-MSGNR > C4A.
C4A = T100-MSGNR.
ENDSELECT.

SELECT MAX( MSGNR ) FROM T100 INTO C4A
WHERE SPRSL = 'D' AND
ARBGB = '00'.

Select with view

SELECT * FROM DD01L
WHERE DOMNAME LIKE 'CHAR%'
AND AS4LOCAL = 'A'.
SELECT SINGLE * FROM DD01T
WHERE DOMNAME = DD01L-DOMNAME
AND AS4LOCAL = 'A'
AND AS4VERS = DD01L-AS4VERS
AND DDLANGUAGE = SY-LANGU.
ENDSELECT.

SELECT * FROM DD01V
WHERE DOMNAME LIKE 'CHAR%'
AND DDLANGUAGE = SY-LANGU.
ENDSELECT.

Select with index support

SELECT * FROM T100
WHERE ARBGB = '00'
AND MSGNR = '999'.
ENDSELECT.

SELECT * FROM T002.
SELECT * FROM T100
WHERE SPRSL = T002-SPRAS
AND ARBGB = '00'
AND MSGNR = '999'.
ENDSELECT.
ENDSELECT.

No comments: