Friday, October 15, 2010

abap program for Display the true average response time, CPU time, db time ...

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.

No comments:

Tutorials on SAP-ABAP

Adobe Interactive Forms Tutorials

Business Server Pages (BSP)

Userexits/BADIs

Web Dynpro for ABAP (Step by step procedure for web dynpro,Tutorials on Web Dynpro,)

ALV Tutorials

Blog Archive

goodsites