Performance Analysis
Debugging is a tool to
check the program while execution to view how processor is working.
Selection-screen: /H in command
screen.
Break points:
Set from within the
debugger, the debugger interrupts the program when abap run time processor some
across the specified keyword.
Watch point:
Set from within the
debugger Watch point are field – specific to observe changes to a particular
field or string.
Static break
points: User
independent
Dynamic break
points: User specific.
Dynamic break points
are more flexible than static break points because they can be removed or deactivated
at run time.
In debugging we can
keep up to 30 break points. At the same time we can keep up
to 10 watch points in the debugging.
Run-time analysis
- It is used to check load on each server.
- Run-time analysis is used to check the efficiency of a program or function module or t-code in terms of what is the load on the database server, application server, presentation server etc.
- The run-time analysis will display the load in a graph with %'s and the time in micro seconds.
- The graph will be displayed with either red color or green color.
- If the graph contains green color, then the program execution time is very good or very less.
- If the graph contains red color, the program execution time is very bad or very long.
- Always make sure the the load on database server should be less than 40% and should be green.
- T-code for run-time analysis is SE30 or SAT (Latest Versions).
Steps
1. Goto SE30.
2.Click on Old SAT
3.Give program name and click on execute.
6. Go back
7. Click on evaluate
8. Execute the program & Click on Evaluate.
9. Execute the program & Click on Evaluate.
Performance Tunning:
It display the time taken by each SQL statement i.e. select, insert.
T-Code ST05.
It display the time taken by each SQL statement i.e. select, insert.
T-Code ST05.
Debugging
Code
Inspector
The Code Inspector is a tool for checking static ABAP coding and DDIC objects (i.e. generally all objects of the Object Repository) under aspects of functional correctness, performance, security, reliability, and statistical information.
The Code Inspector is a tool for checking static ABAP coding and DDIC objects (i.e. generally all objects of the Object Repository) under aspects of functional correctness, performance, security, reliability, and statistical information.
It helps developers to adhere to programming standards
and guidelines by creating messages on less-than-optimal coding. The Code
Inspector offers various possibilities to define object sets and to combine
multiple single checks in so-called "check variants".
Code inspectors
t-codes.
SCID - code
inspector for Specified Object
SCII - code inspector:
Inspection
SIC - ABAP code inspector [Basis - ABAP Test Frameworks (ATC, Check Man, Code Inspector)]
Steps
1.
2.
3.Click on Results Table.
Steps
1.
2.
3.Click on execute.
4.
5. Click on Display All Results.
Steps
1.
2.
3.Click on Results Table.
Extended program check
The extended program check performs a complete check that includes the interfaces of external procedures called from your program, for example, checking whether the number and type of the interface parameters in an external procedure call is correct.
The extended program check is also only a static check. It cannot eliminate all of the circumstances that could lead to exception situations or runtime errors.
SLIN is the ABAP Program Extended Syntax Check tool. It is basically used to perform a code reviewof the program. Its best practice to check the program in SLIN before transporting the program.
The extended program check performs a complete check that includes the interfaces of external procedures called from your program, for example, checking whether the number and type of the interface parameters in an external procedure call is correct.
The extended program check is also only a static check. It cannot eliminate all of the circumstances that could lead to exception situations or runtime errors.
SLIN is the ABAP Program Extended Syntax Check tool. It is basically used to perform a code reviewof the program. Its best practice to check the program in SLIN before transporting the program.
Steps
1.
OR
2.
3.Click on execute.
4.
5. Click on Display All Results.
Introduction
What
is the need of optimizing performance?
In SAP programming, ABAP is the language used.
Most of the projects focuses on getting a team of ABAP programmers as soon as
possible and handing over the technical specifications to them and asking them
to make out the ABAP programs within the "given deadlines".
Often due to this pressure of schedules and
deliveries, the main focus of making a efficient program takes a back seat. An
efficient ABAP program is one which delivers the required output to the user in
a finite time as per the complexity of the program, rather than hearing the
comment "I put the program to run, have my lunch and come back to check
the results".
Leaving aside the hyperbole, a performance
optimized ABAP program saves the time of the end user, thus increasing the
productivity of the user, and in turn keeping the user and the management
happy.
This tutorial focuses on presenting various
performance tuning tips and tricks to make the ABAP programs efficient in doing
their work. This tutorial also assumes that the reader is well versed in all
the concepts and syntax of ABAP programming.
Performance of a program is also often limited
due to hardware restrictions, which is out of the scope of this article.
Correct Way For Selection
Instead of selecting all the data and doing
the processing during the selection, it is advisable to restrict the data to
the selection criteria itself, rather than filtering it out using the ABAP
code.
Incorrect
Select * from zflight.
Check : zflight -airln = 'LF' and zflight-fligh = 'BW222'.
Endselect.
Correct
Select * from zflight where airln = 'LF' and fligh = '222'.
Endselect.
One more point to be noted here is of the
select *. Often this is a lazy coding practice. When a programmer gives select
* even if one or two fields are to be selected, this can significantly slow the
program and put unnecessary load on the entire system. When the application
server sends this request to the database server, and the database server has
to pass on the entire structure for each row back to the application server.
This consumes both CPU and networking resources, especially for large
structures.
Thus it is advisable to select only those
fields that are needed, so that the database server passes only a small amount
of data back.
Also
it is advisable to avoid selecting the data fields into local variables as this
also puts unnecessary load on the server. Instead attempt must be made to
select the fields into an internal table.
How To use aggregate functions
Using the already provided aggregate
functions, instead of finding out the minimum/maximum values using ABAP code.
Incorrect
Maximum_numb = 0.
Select * from zflight where airln = 'LF' and cntry = 'IN'.
Check zflight -fligh > maximum_numb.
Maximum_numb = zflight -fligh.
Endselect.
Correct
Select max( field ) from ztable into maximum_numb where airln = 'LF' and cntry
= 'IN'.
The
other aggregate functions that can be used are min (to find the minimum value),
avg (to find the average of a Data interval), sum (to add up a data interval)
and count (counting the lines in a data selection).
Using Views in place of tables
Many times ABAP programmers deal with base
tables and nested selects. Instead it is always advisable to see whether there
is any view provided by SAP on those base tables, so that the data can be
filtered out directly, rather than specially coding for it.
Incorrect
Select * from zcntry where cntry like 'IN%'.
Select single * from zflight where cntry = zcntry-cntry and airln = 'LF'.
Endselect.
Correct
Select * from zcnfl where cntry like 'IN%' and airln = 'LF'.
Endselect.
Use of the into table clause of select statement
Instead of appending one record at a time into
an internal table, it is advisable to select all the records in a single shot.
Incorrect
Refresh: int_fligh.
Select * from zflight into int_fligh.
Append int_fligh. Clear int_fligh.
Endselect.
Correct
Refresh: int_fligh.
Select * from zflight into table int_fligh.
Modify cluster of lines
Use the variations of the modify command to
speed up this kind of processing.
Incorrect
Loop at int_fligh.
If int_fligh-flag is initial.
Int_fligh-flag = 'X'.
Endif.
Modify int_fligh.
Endloop.
Correct
Int_fligh-flag = 'X'.
Modify int_fligh transporting flag where flag is initial.
Binary Search
When a programmer uses the read command, the
table is sequentially searched. This slows down the processing. Instead of
this, use the binary search addition. The binary search algorithm helps faster
search of a value in an internal table. It is advisable to sort the internal
table before doing a binary search. Binary search repeatedly divides the search
interval in half. If the value to be searched is less than the item in the
middle of the interval, the search is narrowed to the lower half, otherwise the
search is narrowed to the upper half.
Incorrect
Read table int_fligh with key airln = 'LF'.
Correct
Read table int_fligh with key airln = 'LF' binary search.
Appending 2 internal tables
Instead of using the normal loop-endloop
approach for this kind of programming, use the variation of the append command.
Care should be taken that the definition of both the internal tables should be
identical.
Incorrect
Loop at int_fligh1.
Append int_fligh1 to int_fligh2.
Endloop.
Correct
Append lines of int_fligh1 to int_fligh2.
Table Buffering
Use of buffered tables is recommended to
improve the performance considerably. The buffer is bypassed while using the
following statements
1.
Select distinct
2.
Select ... for update
3.
Order by, group by,
having clause
4.
Joins
Use the Bypass buffer addition to the select
clause in order to explicitly bypass the buffer while selecting the data.
FOR ALL Entries
Outer join can be created using this addition
to the where clause in a select statement. It speeds up the performance
tremendously, but the cons of using this variation are listed below
1.
Duplicates are
automatically removed from the resulting data set. Hence care should be taken
that the unique key of the detail line items should be given in the select
statement.
2.
If the table on which
the For All Entries IN clause is based is empty, all rows are selected into the
destination table. Hence it is advisable to check before-hand that the first
table is not empty.
3.
If the table on which
the For All Entries IN clause is based is very large, the performance will go
down instead of improving. Hence attempt should be made to keep the table size
to a moderate level.
Incorrect
Loop at int_cntry.
Select single * from zfligh into int_fligh
where cntry = int_cntry-cntry.
Append int_fligh.
Endloop.
Correct
Select * from zfligh appending table int_fligh
For all entries in int_cntry
Where cntry = int_cntry-cntry.
Structure of Where Clause
When a base table has multiple indices, the
where clause should be in the order of the index, either a primary or a
secondary index.
To choose an index, the optimizer checks the
field names specified in the where clause and then uses an index that has the same
order of the fields. One more tip is that if a table begins with MANDT, while
an index does not, there is a high possibility that the optimizer might not use
that index.
In certain scenarios, it is advisable to check
whether a new index can speed up the performance of a program. This will come
handy in programs that access data from the finance tables.
Move Statement
Instead of using the move-corresponding clause
it is advisable to use the move statement instead. Attempt should be made to
move entire internal table headers in a single shot, rather than moving the
fields one by one.
Inner Join
When multiple SAP tables are logically joined,
it is always advisable to use inner join to read the data from them. This
certainly reduces the load on the network.
Let us take an example of 2 tables, zairln and
zflight. The table zairln has the field airln, which is the airline code and
the field lnnam, which is the name of the airline. The table zflight has the
field airln, the airline code and other fields which hold the details of the
flights that an airline operates.
Since these 2 tables a re logically joined by
the airln field, it is advisable to use the inner join.
Select a~airln a~lnnam b~fligh b~cntry into table int_airdet
From zairln as a inner join zflight as b on a~airln = b~airln.
In order to restrict the data as per the
selection criteria, a where clause can be added to the above inner join.
Using ABAP Sort in place of Order By
The
order by clause is executed on the database server, while the sort statement is
executed on the application server. Thus instead of giving the order by in the
select clause statement, it is better to collect the records in an internal
table and then use the sort command to sort the resulting data set.
No comments:
Post a Comment