cancel
Showing results for 
Search instead for 
Did you mean: 

Performance issue in ABAP

Former Member
0 Kudos

Hi,

This issue is becoming very big challenge for us.

"select adrnr

tplnr

appending table i_iloa

package size 50000

from iloa

where tplnr in s_mprn2

and owner eq '2'.

endselect.

like this i have some other select statements based on i_iloa.

I am getting 4 milian records based on above selection.

Based on i_iloa i have to get some other line items

"select zztplnr

herst

serge

typbz

baujj

zzicharge

matnr

appending table i_equi_i

package size 50000

from equi

for all entries in i_iloa

where zztplnr eq i_iloa-tplnr.

endselect."

I think an average this will get more than 10millians records.So system is going for dump.

ERROR

"Operating system can not provide enough space to process the data"

Error analysis is

"The internal table could not be enlarged futher.You are attempted to create block of table of length for internal table"

Is there any way to fine tune this coding.

Thanks in advance

Murali

Accepted Solutions (0)

Answers (7)

Answers (7)

christian_wohlfahrt
Active Contributor
0 Kudos

Hi Murali!

These selections might be slow, but your main problem isn't performance, but space. Even with faster selects you just will get earlier your 'out-of-memory'-dump.

If you can't restrict your selection further (and you can't save much space by selecting less fields (serge 30chars!)), then think about aggregation selects: select count( * ) ... grouped by matnr, or select max( bauij ) ... whatever you do currently in your program.

This might slow down further the selection - but you will get a result, not a dump.

Maybe you can skip the 'for all entries' - sounds like you select ALL, when you get 2% more entries by selection of 'no deletion flag', this will speed up and don't harm your program. You just have some entries in a (secondary) internal table, which will not be used / shown / printed.

Regards,

Christian

Former Member
0 Kudos

Hi,

Are you using 'FOR ALL ENTRIES' with your program?.

It might makes the program require more memory allocation.

You can avoid using that key word.

It might resolve your problem.

Additionally you can chcek this below link

Thank you.

Regards,

Karun M

Former Member
0 Kudos

Hi Murali,

Karun is right, for all entries is not to be used when u have a huge bunch of data. For example if BKPF has 2000 and BSEG has 10000, the system breaks down the 2000 into typically small packets and uses thois to pick data from bseg, so the entire 10000 gets searched so many times....

Another good way of working with such huge data is by using EXTRACTS. I hope u know this concept, it is very useful especially if ur first table data is in lakhs oe millions like vbak ar vbrp etc...u extrac the data and it is stored in ur Os, that way u have more memory. Also avoid storing data in internal tables, this eats memory, select data and transfer it to ur file directly.

Hope this helps

Shobana

Former Member
0 Kudos

Hi murali,

1. This is a serious error.

There are a couple of things

which need to be taken care of.

2. I am getting 4 milian records based on above selection.

Getting 4 milions records of

this selection is not worth for

any information purpose.

Apply MORE RESTRICTIONS on the sql.

(ie, MORE FILTER CONDITIONS in the where clause)

3.

Operating system can not provide enough space to process the data"

Such error means some

more BASIS / OPERATING SYSTEM LEVEL

configurations / parameter changes

are required.

For that, also contact the BASIS Team.

regards,

amit m.

Former Member
0 Kudos

Hi,

To get performance,

1. Increase ur <b>search criteria</b>

2. Create <b>secondary index</b> if require

3. use <b>for all ent</b>ries statement for line items

4. Instead of <b>select...endselect</b> use <b>into table <Internal table></b> statement.

Regards,

Digesh Panchal

jayanthi_jayaraman
Active Contributor
0 Kudos

Hi,

Try avoiding the usuage of select..Endselect.

I hope it can help you somewhat.

Former Member
0 Kudos

If system is dumping due to time considerations, reduce the package size. Freeing unused memory can also be helpful. Hope you are sure as to why 'package size' specification is being used. Perhaps you can share the specific subroutine code where this is being done and someone can suggest better alternatives.

former_member188685
Active Contributor
0 Kudos

Hi,

check this way..

select adrnr
tplnr
into table table i_iloa
package size 50000
from iloa
where tplnr in s_mprn2
and owner eq '2'.
if sy-subrc = 0.
select zztplnr
herst
serge
typbz
baujj
zzicharge
matnr
into  table i_equi_i
package size 50000
from equi
for all entries in i_iloa
where zztplnr eq i_iloa-tplnr.

endif.

regards

vijay