This article answers how to troubleshoot a background job running for a long duration
--------------------------------------------------------------------------------------------
1) First of all identify the job that is long running and identify details like job class, workprocess that is executing the job
2)
Click on the job to view the display job screen. In the screen, click
on job log to understand what is being performed by the job currently.
This may give details like job is currently extracting some data
packages or processing data packages etc
3)
Identify the executing server and process id of the job from the step 1
and goto transaction SM50 of the respective executing server to view
more details about the background job running.
Figure
out the status of the job like On Hold or running from the process
overview. If the job is On Hold, find out the reason for On Hold by
examing the "Reason" column of SM50 transaction. Reason for On
Hold could be due to CPIC/RFC/DEBUG/ENQ/PRIV/UPD etc.
Double
click on the reason column for detailed information on the same and
troubleshoot accordingly. If reason is RFC, check out which RFC it is
referring to and cross check whether destination system is up or not and
any other problems with that system.
- If it is ENQ, check out any lock issues like lock overflow etc
- If it is PRIV, check out for memory bottlenecks
- If it is UPD, check out whether any update issues
- If it is CPIC, check out for any network , gateway, message server and other communication problems
4)
After performing step3, if you figure out job is not on Hold and it is
in running state, then examine report column to identify what
report/program is being executed by the job. Once you got the
report/program details, figure whether it sap program or custom program
and take actions accordingly.
5)
Also examine Action and table columns in SM50 transaction of respective
executing server to identify what is the action( roll in/roll out
/Sequential read/Physical read/insert/update/delete etc) being carried
out by the job currently and what is the table on which action is being
carried out.
If
it is sequential read, figure out the cost of that sequential etc and
consider for indexing etc. If it is physical read, check out whether
there are too many swaps and consider resizing buffers accordingly. If
you observed delay is due to high roll in/roll out, identify reasons for
the same and tune buffer/memory parameters accordingly.
6) Once you get the table details on which action is being carried out, figure out
- How many records are existing in the table ?
- Is this taking long time due to volume of records ?
- Are there proper indexes on the table ?(If no proper index, consider index creation by taking help of DBA )
- Is the table having upto date statistics ? (If statistics are out of date,
consider updating statistics of that table)
7) Consider debugging the process in SM50 ( Program/Session -> Program -> Debugging ) to figureout the issue
8)
Using ST05 or ST12, a trace can be taken for background job to figure
out where exactly time is being consumed and to identify various
cpu/memory bottlenecks or any buffer issues.
9)
STAT/STAD transcation can be used to figure out what is the reason for
high response time and actions can be taken accordingly
10) By taking help of ABAP er, even ABAP run time analysis can be done using SE30 transaction
By
following the above steps, you can pin point the issue and take actions
accordingly to minimize runtime of long running background jobs.
0 Comments