Posted: Sat Nov 17, 2007 10:21 pm Post subject: Display the true average response time, CPU time, db time ..
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.
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.