‎2008 May 06 10:00 AM
Hi,
i do select for maybe 3,971,953 records in Prod
and i have dump in Qa And Dev i have less records so i dont have any dump,
this is my select:
SELECT *
FROM catsdb
INTO CORRESPONDING FIELDS OF TABLE c_tab
WHERE workdate GE re_date.
i reward
this is the erorr :
What happened?
The current program had to be terminated because of an
error when installing the R/3 System.
The program had already requested 271435216 bytes from the operating
system with 'malloc' when the operating system reported after a
further memory request that there was no more memory space
available.
Make a note of the actions and input which caused the error.
To resolve the problem, contact your SAP system administrator.
You can use transaction ST22 (ABAP Dump Analysis) to view and administer
termination messages, especially those beyond their normal deletion
date.
Set the system profile parameters
- abap/heap_area_dia
- abap/heap_area_nondia
to a maximum of 271435216. Then reduce the value by 10.000.000 to be on the
safe side.
Then restart the SAP System.
abap/heap_area_nondia and abap/heap_area_dia:
Set smaller than the memory achieved for each process
with 'malloc' and smaller than abap/heap_area_total
You should also check whether the available memory (file system
swap and main memory) is sufficient for the started program
and its data.
Error analysis
When the program was running, it was established that more
memory was needed than the operating system is able to provide savely.
To avoid a system crash, you must prevent this
situation.
Regards
‎2008 May 06 10:06 AM
Hi,
Try to mension some more fields for selection in WHERE CLAUSE.
If u want to execute the same SELECT,the basis people has to increase the roll area.
sachin.
‎2008 May 06 10:03 AM
Too many records you are trying to select. Only settings by basis administrator can solve this or narrow down the selection so you get less records.
BTW: Basis will probably tell you to narrow down the number of records to be selected. Normally, if the settings are done correct already, they will not just say, ohhh let's extend the memory etc. for a report to work properly. You can ask of course if there is no other way....
Edited by: Micky Oestreich on May 6, 2008 11:04 AM
‎2008 May 06 11:04 AM
Hi micky'
There is way to do it in 2 select to relieve the memory,
the first select into for 13 month ago until 6 month ago
and after select appending for 6 month ago until now?
the time that the program is running i don't care because
it will run at night in job.
Regards
‎2008 May 06 11:07 AM
It is worth a try but I don't think this will really solve your problem. However, what is it you want to do with the ouput? Can't you just create several batch jobs, say one for every month? But, like I said, this kinda depends on the requirement.
‎2008 May 06 12:25 PM
O.k. Micky
There is commend between the two select taht i can refresh the memory or wait ?
Regards
‎2008 May 06 10:05 AM
hi,
1. Consult your basis consultant for increasing the memory. So that it can hold the required number of records.
2. Try using all the key fields in the where condition of your select statement.
3. Instead of using '*' select only the required fields.
4. Avoid using into corresponding statement and use INTO table statement..
Regards,
Santosh
‎2008 May 06 10:06 AM
Hi,
Try to mension some more fields for selection in WHERE CLAUSE.
If u want to execute the same SELECT,the basis people has to increase the roll area.
sachin.
‎2008 May 06 10:12 AM
Hi Ricardo !
It seems that you're selecting too many rows into a table...
> The program had already requested 271435216 bytes from the operating
> system with 'malloc' when the operating system reported after a
> further memory request that there was no more memory space
> available.
In Dev system the dump doesn't appears because you have less data.
Are you sure you need all that data inside one internal table??
Maybe you can try to change your select to reduce the selected rows...
otherwise.... maybe the archiving of old data could be an option...
Last thing....you can contact your SAP admin for increase the amount of available memory (for ABAP processes) as described in the Dump note
Let me know
Best regards,
Manuel
‎2008 May 06 10:17 AM
Hi,
Try to use open cursor to select the data from db table.
Below is an example for this.
What ever the logic you do this in between DO and ENDDO.
DATA: packsize TYPE i VALUE 1000,
OPEN CURSOR WITH HOLD db_cursor FOR "Defect 12319
SELECT (tab_fields) FROM glpca
CLIENT SPECIFIED
BYPASSING BUFFER
WHERE rldnr IN rldnr.
DO.
To Fetch data in chunks of 2gb
FETCH NEXT CURSOR db_cursor
INTO CORRESPONDING FIELDS OF TABLE i_glpca
PACKAGE SIZE packsize.
*Begin of defect 12319
IF sy-subrc NE 0.
CLOSE CURSOR db_cursor.
EXIT.
ENDIF.
ENDDO.
Or you can also use packaging size option in select statement.
Regards,
Shravan G.
‎2008 May 06 10:18 AM
Hi,
1) COUNTER is the key field in your CATSDB table, so use this field while you are retriving data.
2) you have used '*', instead of it select only those fields which are necessary for your report purpose.
3) you have used INTO CORRESPONDING, which will take each field (as you mentioned *) from the DB table and put in to the corresponding field of internal table. This is most time consuming process. So avoid this and use INTO TABLE.
4) still the performance goes down as the number of records are more. So i will suggest you to put DATE field in the selection screen. So you have to modify your SELECT query as per the date mentioned in the selection screen, you have to extract the data.
thanks & regards
Kishore Kumar Maram