Skip to Content
author's profile photo Former Member
Former Member

how to evaluate performane

what are the major precautions of performance tuning?

Add a comment
10|10000 characters needed characters exceeded

Related questions

6 Answers

  • author's profile photo Former Member
    Former Member
    Posted on Jun 23, 2007 at 09:47 AM

    1. Evaluate your select statements

    2. Use proper internal tables ( Hashed tables when data qty is too large)

    3. While reading internal tables sort the internal tables & use Binary Search

    4..While performing database updates use set operations rather than single record operations.

    5. With regards to the select statements:

    check the where clause (it should be as per the index)

    use select into table , better performance than SELECT - ENDSELECT

    DO NOT use a negative condition in the where clause of the select query , It will negate the index.

    Just a few hints ...

    Kindly reward points to all helpful answers 😊

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jun 26, 2007 at 05:53 AM

    Hi Srikanth,

    ABAP has excellent tools for performance evaluation.

    1. Performacne analysis (ST05) - SQL trace, RFC trace etc.

    Enable trace for your user.

    Run your program

    Disable and view the results

    2. Statistical analysis (STAD)

    alyways available. make sure you run only your program by noting the time and then go for the analysis using that perticular time.

    Regards

    Ajith Chandran

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jul 12, 2007 at 04:26 AM

    Hi ,

    You can use SE30 to see which area is using the most time in the program and then try to performance tune that part .

    For refernece see :

    HOW TO USE SE30?

    PS: REward point if it helps ..

    Regards

    Naveen Gupta

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jul 12, 2007 at 09:42 AM

    Hi,

    Below are the some guide lines.

    Hope this helps you.

    SAP ABAP Performance Tuning

    Tips & Tricks

    Introduction

    Page 1 of 8

    Need for performance tuning

    In this world of SAP programming, ABAP is the universal language. In most of the projects, the focus is on getting a team of ABAP programmers as soon as possible, handing over the technical specifications to them and asking them to churn 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.

    NOTE: Performance of a program is also often limited due to hardware restrictions, which is out of the scope of this article.

    Use of selection criteria

    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.

    Not recommended

    Select * from zflight.

    Check : zflight-airln = ‘LF’ and zflight-fligh = ‘BW222’.

    Endselect.

    Recommended

    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.

    Use of aggregate functions

    Use the already provided aggregate functions, instead of finding out the minimum/maximum values using ABAP code.

    Not recommended

    Maxnu = 0.

    Select * from zflight where airln = ‘LF’ and cntry = ‘IN’.

    Check zflight-fligh > maxnu.

    Maxnu = zflight-fligh.

    Endselect.

    Recommended

    Select max( fligh ) from zflight into maxnu 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).

    Use of Views instead of base 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.

    Not recommended

    Select * from zcntry where cntry like ‘IN%’.

    Select single * from zflight where cntry = zcntry-cntry and airln = ‘LF’.

    Endselect.

    Recommended

    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.

    Not recommended

    Refresh: int_fligh.

    Select * from zflight into int_fligh.

    Append int_fligh. Clear int_fligh.

    Endselect.

    Recommended

    Refresh: int_fligh.

    Select * from zflight into table int_fligh.

    Use of binary search option

    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.

    Not Recommended

    Read table int_fligh with key airln = ‘LF’.

    Recommended

    Read table int_fligh with key airln = ‘LF’ binary search.

    Modifying a group of lines of an internal table

    Use the variations of the modify command to speed up this kind of processing.

    Not recommended

    Loop at int_fligh.

    If int_fligh-flag is initial.

    Int_fligh-flag = ‘X’.

    Endif.

    Modify int_fligh.

    Endloop.

    Recommended

    Int_fligh-flag = ‘X’.

    Modify int_fligh transporting flag where flag is initial.

    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.

    Not Recommended

    Loop at int_fligh1.

    Append int_fligh1 to int_fligh2.

    Endloop.

    Recommended

    Append lines of int_fligh1 to int_fligh2.

    Using 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.

    Use of 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.

    Not Recommended

    Loop at int_cntry.

    Select single * from zfligh into int_fligh

    where cntry = int_cntry-cntry.

    Append int_fligh.

    Endloop.

    Recommended

    Select * from zfligh appending table int_fligh

    For all entries in int_cntry

    Where cntry = int_cntry-cntry.

    Proper 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.

    Proper use of 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.

    Proper use of 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 aairln alnnam bfligh bcntry into table int_airdet

    From zairln as a inner join zflight as b on aairln = bairln.

    In order to restrict the data as per the selection criteria, a where clause can be added to the above inner join.

    Use of ABAP Sort instead 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.

    Tools provided for Performance Analysis

    Following are the different tools provided by SAP for performance analysis of an ABAP object

    1. Run time analysis transaction SE30

    This transaction gives all the analysis of an ABAP program with respect to the database and the non-database processing.

    2. SQL Trace transaction ST05

    The trace list has many lines that are not related to the SELECT statement in the ABAP program. This is because the execution of any ABAP program requires additional administrative SQL calls. To restrict the list output, use the filter introducing the trace list.

    The trace list contains different SQL statements simultaneously related to the one SELECT statement in the ABAP program. This is because the R/3 Database Interface - a sophisticated component of the R/3 Application Server - maps every Open SQL statement to one or a series of physical database calls and brings it to execution. This mapping, crucial to R/3s performance, depends on the particular call and database system. For example, the SELECT-ENDSELECT loop on the SPFLI table in our test program is mapped to a sequence PREPARE-OPEN-FETCH of physical calls in an Oracle environment.

    The WHERE clause in the trace list's SQL statement is different from the WHERE clause in the ABAP statement. This is because in an R/3 system, a client is a self-contained unit with separate master records and its own set of table data (in commercial, organizational, and technical terms). With ABAP, every Open SQL statement automatically executes within the correct client environment. For this reason, a condition with the actual client code is added to every WHERE clause if a client field is a component of the searched table.

    To see a statement's execution plan, just position the cursor on the PREPARE statement and choose Explain SQL. A detailed explanation of the execution plan depends on the database system in use.

    Regards,

    Rama.Pammi

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jul 12, 2007 at 09:42 AM

    hi,

    1. Database

    2. ABAP

    3. System

    Run Any program using SE30 (performance analys) to improve performance refer to tips and trics section of SE30, Always remember that ABAP perfirmance is improved when there is least load on Database.

    u can get an interactive grap in SE30 regarding this with a file.

    also if u find runtime of parts of codes then use :

    Switch on RTA Dynamically within ABAP Code

    *To turn runtim analysis on within ABAP code insert the following code

    SET RUN TIME ANALYZER ON.

    *To turn runtim analysis off within ABAP code insert the following code

    SET RUN TIME ANALYZER OFF.

    Always check the driver internal tables is not empty, while using FOR ALL ENTRIES

    Avoid for all entries in JOINS

    Try to avoid joins and use FOR ALL ENTRIES.

    Try to restrict the joins to 1 level only ie only for tables

    Avoid using Select *.

    Avoid having multiple Selects from the same table in the same object.

    Try to minimize the number of variables to save memory.

    The sequence of fields in 'where clause' must be as per primary/secondary index ( if any)

    Avoid creation of index as far as possible

    Avoid operators like <>, > , < & like % in where clause conditions

    Avoid select/select single statements in loops.

    Try to use 'binary search' in READ internal table. Ensure table is sorted before using BINARY SEARCH.

    Avoid using aggregate functions (SUM, MAX etc) in selects ( GROUP BY , HAVING,)

    Avoid using ORDER BY in selects

    Avoid Nested Selects

    Avoid Nested Loops of Internal Tables

    Try to use FIELD SYMBOLS.

    Try to avoid into Corresponding Fields of

    Avoid using Select Distinct, Use DELETE ADJACENT

    Go through the following Document

    Check the following Links

    performance-tuning-of-program

    http://www.sapgenie.com/abap/performance.htm

    http://www.thespot4sap.com/Articles/SAPABAPPerformanceTuning_PerformanceAnalysisTools.asp

    check the below link

    http://www.sap-img.com/abap/performance-tuning-for-data-selection-statement.htm

    See the following link if it's any help:

    http://www.thespot4sap.com/Articles/SAPABAPPerformanceTuning_PerformanceAnalysisTools.asp

    Check also http://service.sap.com/performance

    and

    books like

    http://www.sap-press.com/product.cfm?account=∏uct=H951

    http://www.sap-press.com/product.cfm?account=∏uct=H973

    http://www.sap-img.com/abap/more-than-100-abap-interview-faqs.htm

    http://www.thespot4sap.com/Articles/SAPABAPPerformanceTuning_PerformanceAnalysisTools.asp

    Performance tuning for Data Selection Statement

    http://www.sap-img.com/abap/performance-tuning-for-data-selection-statement.htm

    Run Time Analyser

    http://help.sap.com/saphelp_47x200/helpdata/en/c6/617cafe68c11d2b2ab080009b43351/content.htm

    SQL trace

    http://help.sap.com/saphelp_47x200/helpdata/en/d1/801f7c454211d189710000e8322d00/content.htm

    CATT - Computer Aided Testing Too

    http://help.sap.com/saphelp_47x200/helpdata/en/b3/410b37233f7c6fe10000009b38f936/frameset.htm

    Test Workbench

    http://help.sap.com/saphelp_47x200/helpdata/en/a8/157235d0fa8742e10000009b38f889/frameset.htm

    Coverage Analyser

    http://help.sap.com/saphelp_47x200/helpdata/en/c7/af9a79061a11d4b3d4080009b43351/content.htm

    Runtime Monitor

    http://help.sap.com/saphelp_47x200/helpdata/en/b5/fa121cc15911d5993d00508b6b8b11/content.htm

    Memory Inspector

    http://help.sap.com/saphelp_47x200/helpdata/en/a2/e5fc84cc87964cb2c29f584152d74e/content.htm

    ECATT - Extended Computer Aided testing tool.

    http://help.sap.com/saphelp_47x200/helpdata/en/20/e81c3b84e65e7be10000000a11402f/frameset.htm

    Just refer to these links...

    performance

    Performance Guide

    performance issues...

    Performance Tuning

    Performance issues

    performance tuning

    performance tuning

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jul 12, 2007 at 11:41 AM

    HI

    AFTER U WRITE YOUR PROGRAM I

    FOLLOW THIS PATH

    MENU PATH PROGRAM -> CHECK-> CODE INSPECTOR

    THERE YOU HAVE TO MAINTAIN ALL THE ERRORS AND WARNING AS ZERO

    THEN ONLY IT WILL BE GOOD IN THE PERFORMANCE POINT OF VIEW

    SO DO THIS AND CHECK IT

    REGARDS

    NARESH

    Add a comment
    10|10000 characters needed characters exceeded

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.