SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Display the true average response time, CPU time, db time ..



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> Performance tuning | Производительность
View previous topic :: View next topic  
Author Message
admin
Администратор
Администратор



Joined: 01 Sep 2007
Posts: 1639

PostPosted: Sat Nov 17, 2007 10:21 pm    Post subject: Display the true average response time, CPU time, db time .. Reply with quote

Code:
 
REPORT ZTRUERSP NO STANDARD PAGE HEADING.
*********************************************************************
* Display the true average response time.
* The result of this report contains the same data the ST03-workload
* overview screen has with one major difference: the values belonging
* to a defined set of abaps usually running online and taking a very
* long time to complete are ignored during the calculation. These
* abap's response time is not a real dialog response time (even if
* they run in dialog mode) and it can completely offset the actual
* response time of ST03 as well as all the other values (cpu time,
* sequential read ...)
*********************************************************************
TABLES: TRDIR.
DATA: R TYPE P DECIMALS 1, K TYPE P DECIMALS 1, I TYPE I, X TYPE I,
      Y TYPE I, ELEM_PER_ROW TYPE I VALUE 8, LASTREC(8), ELAPSTIM(8).
*
DATA: BEGIN OF LIST OCCURS 10.
        INCLUDE STRUCTURE MSXXLIST.
DATA: END OF LIST.
DATA: BEGIN OF SUMMARY OCCURS 50.
        INCLUDE STRUCTURE SAPWLSUMRY.
DATA: END OF SUMMARY.
DATA: BEGIN OF  HI OCCURS 50.
        INCLUDE STRUCTURE SAPWLHITL.
DATA: END OF HI.
DATA: BEGIN OF STAB.
        INCLUDE STRUCTURE SAPWLSUMRY.
DATA: END OF STAB.
*
PARAMETERS: DATE LIKE SY-DATUM MODIF ID SC1 OBLIGATORY.
PARAMETERS: SERVER(8) MODIF ID SC1 OBLIGATORY LOWER CASE.
PARAMETERS: TRUE_RSP AS CHECKBOX.
SELECT-OPTIONS ABPAP FOR TRDIR-NAME  NO INTERVALS.
*
PERFORM CALCULATE.
FORMAT INTENSIFIED OFF.
* box1
PERFORM BOX USING 1 4 'Instance'.
SKIP TO LINE 2. POSITION 2.
* line1
WRITE: /2 'SAP System',
       18 SY-SYSID,
       29 'First record',
       45 '00:00:00',
       56 'Date',
       72 DATE.
* line2
IF DATE = SY-DATUM.
  LASTREC = SY-UZEIT.
ELSE.
  LASTREC = '235959'.
ENDIF.

WRITE: / 'Server' UNDER 'SAP System',
       SY-HOST UNDER SY-SYSID,
       'Last record' UNDER 'First record',
       LASTREC USING EDIT MASK '__:__:__' UNDER '00:00:00'.
* line3
READ TABLE LIST INDEX 1.
TRANSLATE LIST-SERV USING 's a p d '.
CONDENSE LIST-SERV NO-GAPS.
WRITE: / 'Instance no.' UNDER 'SAP System',
       LIST-SERV UNDER SY-SYSID,
       'Elapsed time' UNDER 'First record',
       LASTREC USING EDIT MASK '__:__:__' UNDER '00:00:00'.
* box2
PERFORM BOX USING 7 14 'Workload'.
SKIP TO LINE 8. POSITION 2.
* line1
WRITE: /2 'CPU time',
       26 STAB-CPUTI LEFT-JUSTIFIED,
       38 'Database calls',
       62 STAB-PHYCALLS LEFT-JUSTIFIED.
* line2
R = STAB-READDIRCNT + STAB-READSEQCNT + STAB-CHNGCNT.
WRITE: / 'Elapsed time' UNDER 'CPU time',
         STAB-ELAPSEDTI UNDER STAB-CPUTI LEFT-JUSTIFIED,
         'Database requests' UNDER 'Database calls',
         R UNDER STAB-PHYCALLS LEFT-JUSTIFIED.
* line3
WRITE: / ' Direct reads' UNDER 'Database calls',
         STAB-READDIRCNT UNDER STAB-PHYCALLS LEFT-JUSTIFIED.
* line4
WRITE: / 'Dialog steps' UNDER 'CPU time',
         STAB-COUNT UNDER STAB-CPUTI LEFT-JUSTIFIED,
         'Sequential reads' UNDER 'Database calls',
         STAB-READSEQCNT UNDER STAB-PHYCALLS LEFT-JUSTIFIED.
* line5
R = STAB-RESPTI / STAB-COUNT.
WRITE: / ' AV. response time' UNDER 'CPU time',
         R UNDER STAB-CPUTI LEFT-JUSTIFIED,
         'Changes' UNDER 'Database calls',
         STAB-CHNGCNT UNDER STAB-PHYCALLS LEFT-JUSTIFIED.
* line6
R = STAB-CPUTI / STAB-COUNT.
WRITE: / ' AV. CPU time' UNDER 'CPU time',
         R UNDER STAB-CPUTI LEFT-JUSTIFIED.
* line7
R = STAB-QUEUETI / STAB-COUNT.
K = STAB-READDIRTI + STAB-READSEQTI + STAB-CHNGTI.
K = K / ( STAB-READDIRCNT + STAB-READSEQCNT + STAB-CHNGCNT ).
WRITE: / ' AV. wait time' UNDER 'CPU time',
         R UNDER STAB-CPUTI LEFT-JUSTIFIED,
         'Time per DB request' UNDER 'Database calls',
         K UNDER STAB-PHYCALLS LEFT-JUSTIFIED.
* line8
R = STAB-READDIRTI / STAB-READDIRCNT.
K = STAB-LOADGENTI / STAB-COUNT.
WRITE: / ' AV. load time' UNDER 'CPU time',
         K UNDER STAB-CPUTI LEFT-JUSTIFIED,
         ' Direct reads' UNDER 'Database calls',
         R UNDER STAB-PHYCALLS LEFT-JUSTIFIED.
* line9
R = STAB-READSEQTI / STAB-READSEQCNT.
K = ( STAB-READDIRTI + STAB-READSEQTI + STAB-CHNGTI ) / STAB-COUNT.
WRITE: / ' AV. DB req. time' UNDER 'CPU time',
         K UNDER STAB-CPUTI LEFT-JUSTIFIED,
         '  Sequential reads' UNDER 'Database calls',
         R UNDER STAB-PHYCALLS LEFT-JUSTIFIED.
* line10
R = ( STAB-BYTES / 1024 ) / STAB-COUNT.
K = STAB-CHNGTI / STAB-CHNGCNT.
IF TRUE_RSP = 'X'.
  WRITE: / ' AV. bytes req.' UNDER 'CPU time' COLOR 6,
           R UNDER STAB-CPUTI LEFT-JUSTIFIED COLOR 6,
           '  Changes and commis' UNDER 'Database calls',
           K UNDER STAB-PHYCALLS LEFT-JUSTIFIED.
ELSE.
  WRITE: / ' AV. bytes req.' UNDER 'CPU time',
           R UNDER STAB-CPUTI LEFT-JUSTIFIED,
           '  Changes and commis' UNDER 'Database calls',
           K UNDER STAB-PHYCALLS LEFT-JUSTIFIED.
ENDIF.
* line11
WRITE: / .
* line12
R = STAB-ROLLINTI / STAB-ROLLINCNT.
WRITE: / 'Roll-ins' UNDER 'CPU time',
         STAB-ROLLINCNT UNDER STAB-CPUTI LEFT-JUSTIFIED,
         'Av. time/roll in' UNDER 'Database calls',
         R UNDER STAB-PHYCALLS LEFT-JUSTIFIED.
* line13
R = STAB-ROLLOUTTI / STAB-ROLLOUTCNT.
WRITE: / 'Roll-outs' UNDER 'CPU time',
         STAB-ROLLOUTCNT UNDER STAB-CPUTI LEFT-JUSTIFIED,
         'Av. time/roll out' UNDER 'Database calls',
         R UNDER STAB-PHYCALLS LEFT-JUSTIFIED.
* box3
PERFORM BOX USING 23 6 'Task types'.
SKIP TO LINE 24. POSITION 2.
WRITE /2
'Only dialog times! The following long running reports are excluded:'.
FORMAT INTENSIFIED ON.
LOOP AT ABPAP.
  Y = 25 + ( ( SY-TABIX - 1 ) DIV ELEM_PER_ROW ).
  X = ( ( SY-TABIX - 1 ) MOD ELEM_PER_ROW ) * 9 + 2.
  SKIP TO LINE Y. POSITION X.
  WRITE ABPAP-LOW.
ENDLOOP.
*
INITIALIZATION.
  DATE = SY-DATUM.
  SERVER = SY-HOST.
*
*---------------------------------------------------------------------*
* FORM BOX                                                            *
*---------------------------------------------------------------------*
FORM BOX USING VALUE(YPOS) HEIGHT TEXT.
*
  DATA: WIDTH TYPE I VALUE 84,
        R TYPE I, K TYPE I.
* Bottom horizontal line
  R = HEIGHT + YPOS.
  SKIP TO LINE R.
  DO WIDTH TIMES.
    WRITE '-' NO-GAP.
  ENDDO.
* Top horizontal line with text
  K = STRLEN( TEXT ).
  R = WIDTH - 2 - K.
  SKIP TO LINE YPOS.
  WRITE:  '--'.
  WRITE AT 3(K) TEXT NO-GAP.
  DO R TIMES.
    WRITE:  '-' NO-GAP.
  ENDDO.
* Vertical lines
  DO HEIGHT TIMES.
    SKIP TO LINE YPOS.
    WRITE: '|'. POSITION WIDTH. WRITE: '|'.
    YPOS = YPOS + 1.
  ENDDO.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM CALCULATE                                                *
*---------------------------------------------------------------------*
FORM CALCULATE.
* Get the performance data
  CALL FUNCTION 'TH_SERVER_LIST'
       TABLES
            LIST = LIST.
  CALL FUNCTION 'SAPWL_GET_SUMMARY_STATISTIC'
       EXPORTING
            PERIODTYPE     = 'D'
            HOSTID         = SERVER
            STARTDATE      = SY-DATUM
       TABLES
            SUMMARY        = SUMMARY
            HITLIST_RESPTI = HI.
  LOOP AT SUMMARY.
    IF SUMMARY-TASKTYPE = 'DIALOG'.
      MOVE-CORRESPONDING SUMMARY TO STAB.
    ENDIF.
  ENDLOOP.
* Correction with the abaps
  IF TRUE_RSP = 'X'.
    LOOP AT HI.
      LOOP AT ABPAP.
        IF HI-REPORT = ABPAP-LOW.
          STAB-CHNGCNT = STAB-CHNGCNT - HI-UPDCNT -
                            HI-DELCNT - HI-INSCNT.
          STAB-CHNGTI = STAB-CHNGTI - HI-UPDTI - HI-DELTI -
                  HI-INSTI.
          STAB-COUNT = STAB-COUNT - 1.
          STAB-CPUTI = STAB-CPUTI - HI-CPUTI.
          STAB-LOADGENTI = STAB-LOADGENTI - HI-GENERATETI -
                  HI-REPLOADTI - HI-CUALOADTI - HI-DYNPLOADTI.
          STAB-PHYCALLS = STAB-PHYCALLS - HI-PHYDELCNT -
                  HI-PHYREADCNT - HI-PHYINSCNT - HI-PHYUPDCNT.
          STAB-QUEUETI = STAB-QUEUETI - HI-QUEUETI.
          STAB-READDIRCNT = STAB-READDIRCNT - HI-READDIRCNT.
          STAB-READDIRTI = STAB-READDIRTI - HI-READDIRTI.
          STAB-READSEQCNT = STAB-READSEQCNT - HI-READSEQCNT.
          STAB-READSEQTI = STAB-READSEQTI - HI-READSEQTI.
          STAB-RESPTI = STAB-RESPTI - HI-RESPTI.
          STAB-ROLLINCNT = STAB-ROLLINCNT - HI-ROLLINCNT.
          STAB-ROLLOUTCNT = STAB-ROLLOUTCNT - HI-ROLLOUTCNT.
          STAB-ROLLOUTTI = STAB-ROLLOUTTI - HI-ROLLOUTTI.
        ENDIF.
      ENDLOOP.
    ENDLOOP.
  ENDIF.
ENDFORM.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> Performance tuning | Производительность All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.