Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

what is parallel cursor

Former Member
0 Likes
1,045

what is parallel cursor

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
850

Hi,

Here is the sample program which use the parallel cursor,

************************************************************************
*              Performance Tuning using parallel cursor
*
* Extracts from program ZFAL2002
************************************************************************


************************************************************************
* START-OF-SELECTION
  SELECT *
  INTO TABLE I_KEPH FROM KEPH
  WHERE KADKY <= SY-DATUM
    AND TVERS = '01'
    AND KALKA IN ('01','Z1','Z2')
    AND BWVAR IN ('Z01','Z02','Z03','Z04','Z07')
    AND KKZST = ' '
    AND KKZMA = ' '
    AND KKZMM = ' '
    AND KEART = 'H'
    AND PATNR = 0.

* Table must be sorted to ensure all required records are together
  SORT I_KEPH BY KALNR KALKA BWVAR KADKY.

* Perform actual processing
  Perform get_cost_values.


*----------------------------------------------------------------------*
FORM GET_COST_VALUES.
* Determine start position and then process all records for given key
* from that starting point
* i_keph is sorted on kalnr kalka bwvar kadky.
  READ TABLE I_KEPH WITH KEY KALNR = W_KEKO-KALNR
                             KALKA = W_KEKO-KALKA
                             BWVAR = W_KEKO-BWVAR
                             KADKY = W_KEKO-KADKY BINARY SEARCH.
  IF SY-SUBRC = 0.
* Loop at itab from first record found (sy-tabix) until record
* no-longer matches your criteria.
    LOOP AT I_KEPH FROM SY-TABIX.
      IF  I_KEPH-KALNR = W_KEKO-KALNR AND I_KEPH-KALKA = W_KEKO-KALKA
      AND I_KEPH-BWVAR = W_KEKO-BWVAR AND I_KEPH-KADKY = W_KEKO-KADKY.
*       Key match
        D_MAT_COST = D_MAT_COST + I_KEPH-KST001.
        D_LAB_COST = D_LAB_COST + I_KEPH-KST004.
        D_OVER_HEAD = D_OVER_HEAD + I_KEPH-KST010.
        D_EXT_PURCH = D_EXT_PURCH + I_KEPH-KST014.
        D_MISC_COST = D_MISC_COST + I_KEPH-KST002 + I_KEPH-KST003
                    + I_KEPH-KST005 + I_KEPH-KST006 + I_KEPH-KST007
                    + I_KEPH-KST008 + I_KEPH-KST009 + I_KEPH-KST011
                    + I_KEPH-KST012 + I_KEPH-KST013 + I_KEPH-KST015
                    + I_KEPH-KST016 + I_KEPH-KST017 + I_KEPH-KST018
                    + I_KEPH-KST019 + I_KEPH-KST020 + I_KEPH-KST021
                    + I_KEPH-KST022 + I_KEPH-KST023 + I_KEPH-KST024
                    + I_KEPH-KST025 + I_KEPH-KST026 + I_KEPH-KST027
                    + I_KEPH-KST028 + I_KEPH-KST029 + I_KEPH-KST030
                    + I_KEPH-KST031 + I_KEPH-KST032 + I_KEPH-KST033
                    + I_KEPH-KST034 + I_KEPH-KST035 + I_KEPH-KST036
                    + I_KEPH-KST037 + I_KEPH-KST038 + I_KEPH-KST039
                    + I_KEPH-KST040.
      ELSE.
*       Key greater - can't be less
        EXIT.                                               " Exit loop
      ENDIF.
    ENDLOOP.
  ENDIF.

  D_MAT_COST  = D_MAT_COST  / W_KEKO-LOSGR.
  D_LAB_COST  = D_LAB_COST  / W_KEKO-LOSGR.
  D_OVER_HEAD = D_OVER_HEAD / W_KEKO-LOSGR.
  D_EXT_PURCH = D_EXT_PURCH / W_KEKO-LOSGR.
  D_MISC_COST = D_MISC_COST / W_KEKO-LOSGR.
ENDFORM.                               " GET_COST_VALUES

4 REPLIES 4
Read only

Former Member
0 Likes
851

Hi,

Here is the sample program which use the parallel cursor,

************************************************************************
*              Performance Tuning using parallel cursor
*
* Extracts from program ZFAL2002
************************************************************************


************************************************************************
* START-OF-SELECTION
  SELECT *
  INTO TABLE I_KEPH FROM KEPH
  WHERE KADKY <= SY-DATUM
    AND TVERS = '01'
    AND KALKA IN ('01','Z1','Z2')
    AND BWVAR IN ('Z01','Z02','Z03','Z04','Z07')
    AND KKZST = ' '
    AND KKZMA = ' '
    AND KKZMM = ' '
    AND KEART = 'H'
    AND PATNR = 0.

* Table must be sorted to ensure all required records are together
  SORT I_KEPH BY KALNR KALKA BWVAR KADKY.

* Perform actual processing
  Perform get_cost_values.


*----------------------------------------------------------------------*
FORM GET_COST_VALUES.
* Determine start position and then process all records for given key
* from that starting point
* i_keph is sorted on kalnr kalka bwvar kadky.
  READ TABLE I_KEPH WITH KEY KALNR = W_KEKO-KALNR
                             KALKA = W_KEKO-KALKA
                             BWVAR = W_KEKO-BWVAR
                             KADKY = W_KEKO-KADKY BINARY SEARCH.
  IF SY-SUBRC = 0.
* Loop at itab from first record found (sy-tabix) until record
* no-longer matches your criteria.
    LOOP AT I_KEPH FROM SY-TABIX.
      IF  I_KEPH-KALNR = W_KEKO-KALNR AND I_KEPH-KALKA = W_KEKO-KALKA
      AND I_KEPH-BWVAR = W_KEKO-BWVAR AND I_KEPH-KADKY = W_KEKO-KADKY.
*       Key match
        D_MAT_COST = D_MAT_COST + I_KEPH-KST001.
        D_LAB_COST = D_LAB_COST + I_KEPH-KST004.
        D_OVER_HEAD = D_OVER_HEAD + I_KEPH-KST010.
        D_EXT_PURCH = D_EXT_PURCH + I_KEPH-KST014.
        D_MISC_COST = D_MISC_COST + I_KEPH-KST002 + I_KEPH-KST003
                    + I_KEPH-KST005 + I_KEPH-KST006 + I_KEPH-KST007
                    + I_KEPH-KST008 + I_KEPH-KST009 + I_KEPH-KST011
                    + I_KEPH-KST012 + I_KEPH-KST013 + I_KEPH-KST015
                    + I_KEPH-KST016 + I_KEPH-KST017 + I_KEPH-KST018
                    + I_KEPH-KST019 + I_KEPH-KST020 + I_KEPH-KST021
                    + I_KEPH-KST022 + I_KEPH-KST023 + I_KEPH-KST024
                    + I_KEPH-KST025 + I_KEPH-KST026 + I_KEPH-KST027
                    + I_KEPH-KST028 + I_KEPH-KST029 + I_KEPH-KST030
                    + I_KEPH-KST031 + I_KEPH-KST032 + I_KEPH-KST033
                    + I_KEPH-KST034 + I_KEPH-KST035 + I_KEPH-KST036
                    + I_KEPH-KST037 + I_KEPH-KST038 + I_KEPH-KST039
                    + I_KEPH-KST040.
      ELSE.
*       Key greater - can't be less
        EXIT.                                               " Exit loop
      ENDIF.
    ENDLOOP.
  ENDIF.

  D_MAT_COST  = D_MAT_COST  / W_KEKO-LOSGR.
  D_LAB_COST  = D_LAB_COST  / W_KEKO-LOSGR.
  D_OVER_HEAD = D_OVER_HEAD / W_KEKO-LOSGR.
  D_EXT_PURCH = D_EXT_PURCH / W_KEKO-LOSGR.
  D_MISC_COST = D_MISC_COST / W_KEKO-LOSGR.
ENDFORM.                               " GET_COST_VALUES

Read only

former_member189629
Active Contributor
0 Likes
850

Hi Nagendra,

At times, no matter howmuch you want to avoid nested loops, you will have no choice left but to use nested loops, and they surely are a hinderence to program performance. P

Parallel cursors are used to improve performance of nested loops.

the below links will give you a better insight:

http://www.sapdevelopment.co.uk/perform/perform_pcursor.htm

/people/rob.burbank/blog/2006/02/07/performance-of-nested-loops

Reward if helpful.

Regards,

Karthik

Read only

Former Member
0 Likes
850

In se30(abap tips & tricks), u wil get foll code for parallel cursor.

  • Entries: 1000 (ITAB1), 300 (ITAB2)

  • Line width: 100

  • Both tables sorted by unique key K

DATA: I TYPE I.

I = 1.

LOOP AT ITAB1 INTO WA1.

READ TABLE ITAB2 INTO WA2 INDEX I.

IF SY-SUBRC <> 0. EXIT. ENDIF.

IF WA2-K = WA1-K.

" ...

ENDIF.

ENDLOOP.

Read only

Former Member
0 Likes
850

Hi....

Go to transaction se30 ->utilities -> trips and tricks

->internal tables ->simple algorithms

You will find the sample code and some documentation. This should be helpful for you ..

hi just see the following link. it is very simple and useful.....

There is a blog on SDN /people/rob.burbank/blog/2006/02/07/performance-of-nested-loops

it helps you a lot...

guess you are referring to the SE30 Tipps&Tricks

to avoid nested loops:

nestedLoop:

  • Entries: 100 (ITAB1), 1000 (ITAB2)

  • Line width: 100

  • Both tables sorted by key K

LOOP AT ITAB1 INTO WA1.

LOOP AT ITAB2 INTO WA2

WHERE K = WA1-K.

" ...

ENDLOOP.

ENDLOOP.

parallel cursors:

  • Entries: 100 (ITAB1), 1000 (ITAB2)

  • Line width: 100

  • Both tables sorted by key K

I = 1.

LOOP AT ITAB1 INTO WA1.

LOOP AT ITAB2 INTO WA2 FROM I.

IF WA2-K <> WA1-K.

I = SY-TABIX.

EXIT.

ENDIF.

" ...

ENDLOOP.

ENDLOOP.

If ITAB1 has n1 entries and ITAB2 has n2 entries, the time needed for the nested loop with the straightforward algorithm is O(n1 * n2),whereas the parallel cursor approach takes only O(n1 + n2) time.

The above parallel cursor algorithm assumes that ITAB2 contains only entries also contained in ITAB1.If this assumption does not hold, the parallel cursor algorithm gets slightly more complicated, but its performance characteristics remain the same.

Also go through this link,

http://help.sap.com/saphelp_47x200/helpdata/en/fc/eb3b23358411d1829f0000e829fbfe/frameset.htm

Reward points if useful......

Suresh......