Little tool for performance
Little tool for performance: Currently, I’m working on a Performance project. As you may know, you can get performance down by implementing or using an Index, completing a WHERE statement or by deleting duplicated SELECT’s. Sometimes, you need to JOIN tables, so you need to know which fields must be used. For this, I have created a small performance tool to help me in my everyday work. This tool, perform three tasks… ** List all indices of a given table. ** List all the tables and views where two given fields are repeated. First, the source code…Then some pictures… *&————————————————— * *& Report ZPERFORMANCE_TOOL * *&————————————————— * REPORT ZPERFORMANCE_TOOL. *=====================================================* * TABLES * *=====================================================* TABLES: DD03L. *=====================================================* * TYPES * *=====================================================* TYPES: BEGIN OF TY_REPEATED, FIELDNAME TYPE DD03P-FIELDNAME, DDTEXT TYPE DD03P-DDTEXT, END OF TY_REPEATED. TYPES: BEGIN OF TY_INDEX, SQLTAB TYPE DD17S-SQLTAB, INDEXNAME TYPE DD17S-INDEXNAME, FIELDNAME TYPE DD17S-FIELDNAME, DDTEXT TYPE DD12T-DDTEXT, END OF TY_INDEX. TYPES: BEGIN OF TY_DD03L, TABNAME TYPE DD03L-TABNAME, FIELDNAME TYPE DD03L-FIELDNAME, END OF TY_DD03L. *=====================================================* * INTERNAL TABLES * *=====================================================* DATA: DD03P_TAB TYPE STANDARD TABLE OF DD03P, DD03P_TABLE1 TYPE STANDARD TABLE OF DD03P, DD03P_TABLE2 TYPE STANDARD TABLE OF DD03P, T_INDEX TYPE STANDARD TABLE OF TY_INDEX, T_REPEATED TYPE STANDARD TABLE OF TY_REPEATED, T_DD03L TYPE STANDARD TABLE OF DD03L, T_DD03L_AUX TYPE STANDARD TABLE OF DD03L. *=====================================================* * VARIABLES * *=====================================================* DATA: LONG_1 TYPE I, LONG_2 TYPE I, W_TITLE TYPE STRING, W_INDEXNAME TYPE DD17S-INDEXNAME, FIELD1(30). *=====================================================* * FIELD-SYMBOLS * *=====================================================* FIELD-SYMBOLS: LIKE LINE OF T_DD03L. *=====================================================* * SELECTION-SCREEN * *=====================================================* SELECTION-SCREEN BEGIN OF BLOCK GROUP WITH FRAME TITLE TEXT-001. PARAMETERS: REP_1 RADIOBUTTON GROUP RND USER-COMMAND TEST DEFAULT ‘X’, REP_2 RADIOBUTTON GROUP RND, REP_3 RADIOBUTTON GROUP RND. SELECTION-SCREEN END OF BLOCK GROUP. SELECTION-SCREEN BEGIN OF BLOCK REP_1 WITH FRAME. PARAMETERS: P_TAB_1 TYPE DD17S-SQLTAB MODIF ID SC1, P_TAB_2 TYPE DD17S-SQLTAB MODIF ID SC1. SELECTION-SCREEN END OF BLOCK REP_1. SELECTION-SCREEN BEGIN OF BLOCK REP_2 WITH FRAME. PARAMETERS: P_TABNAM TYPE DD17S-SQLTAB MODIF ID SC2. SELECTION-SCREEN END OF BLOCK REP_2. SELECTION-SCREEN BEGIN OF BLOCK REP_3 WITH FRAME. PARAMETERS: P_FIELD1 TYPE DD03L-FIELDNAME MODIF ID SC3, P_FIELD2 TYPE DD03L-FIELDNAME MODIF ID SC3. SELECTION-SCREEN END OF BLOCK REP_3. *=====================================================* * AT SELECTION-SCREEN * *=====================================================* AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. IF REP_1 EQ ‘X’. IF SCREEN-GROUP1 = ‘SC2’. SCREEN-ACTIVE = ‘0’. MODIFY SCREEN. CONTINUE. ENDIF. IF SCREEN-GROUP1 = ‘SC3’. SCREEN-ACTIVE = ‘0’. MODIFY SCREEN. CONTINUE. ENDIF. ELSEIF REP_2 EQ ‘X’. IF SCREEN-GROUP1 = ‘SC1’. SCREEN-ACTIVE = ‘0’. MODIFY SCREEN. CONTINUE. ENDIF. IF SCREEN-GROUP1 = ‘SC3’. SCREEN-ACTIVE = ‘0’. MODIFY SCREEN. CONTINUE. ENDIF. ELSEIF REP_3 EQ ‘X’. IF SCREEN-GROUP1 = ‘SC1’. SCREEN-ACTIVE = ‘0’. MODIFY SCREEN. CONTINUE. ENDIF. IF SCREEN-GROUP1 = ‘SC2’. SCREEN-ACTIVE = ‘0’. MODIFY SCREEN. CONTINUE. ENDIF. ENDIF. ENDLOOP. *=====================================================* * START-OF-SELECTION * *=====================================================* START-OF-SELECTION. IF REP_1 EQ ‘X’. CONCATENATE P_TAB_1 P_TAB_2 INTO W_TITLE SEPARATED BY ‘-‘. SY-TITLE = W_TITLE. CALL FUNCTION ‘DDIF_TABL_GET’ EXPORTING NAME = P_TAB_1 STATE = ‘A’ LANGU = SY-LANGU TABLES DD03P_TAB = DD03P_TABLE1 EXCEPTIONS ILLEGAL_INPUT = 1 OTHERS = 2. DELETE DD03P_TABLE1 WHERE ROLLNAME EQ SPACE. CALL FUNCTION ‘DDIF_TABL_GET’ EXPORTING NAME = P_TAB_2 STATE = ‘A’ LANGU = SY-LANGU TABLES DD03P_TAB = DD03P_TABLE2 EXCEPTIONS ILLEGAL_INPUT = 1 OTHERS = 2. DELETE DD03P_TABLE2 WHERE ROLLNAME EQ SPACE. DESCRIBE TABLE DD03P_TABLE1 LINES LONG_1. DESCRIBE TABLE DD03P_TABLE2 LINES LONG_2. IF LONG_1 GT LONG_2. LOOP AT DD03P_TABLE1 ASSIGNING -DDTEXT. ENDLOOP. ELSEIF REP_2 EQ ‘X’. SELECT DD17S~SQLTAB DD17S~INDEXNAME FIELDNAME DDTEXT INTO TABLE T_INDEX FROM DD17S INNER JOIN DD12T ON DD17S~SQLTAB EQ DD12T~SQLTAB AND DD17S~INDEXNAME EQ DD12T~INDEXNAME WHERE DD17S~SQLTAB EQ P_TABNAM AND DDLANGUAGE EQ SY-LANGU. CALL FUNCTION ‘DDIF_TABL_GET’ EXPORTING NAME = P_TABNAM STATE = ‘A’ LANGU = SY-LANGU TABLES DD03P_TAB = DD03P_TAB EXCEPTIONS ILLEGAL_INPUT = 1 OTHERS = 2. SY-TITLE = P_TABNAM. LOOP AT T_INDEX ASSIGNING -DDTEXT. ENDIF. ENDLOOP. ELSE. SELECT DD03L~TABNAME FIELDNAME INTO TABLE T_DD03L FROM ( DD03L INNER JOIN DD02L ON DD03L~TABNAME EQ DD02L~TABNAME ) WHERE TABCLASS IN (‘TRANSP’,’VIEW’) AND FIELDNAME EQ P_FIELD1 OR FIELDNAME EQ P_FIELD2. SORT T_DD03L. LOOP AT T_DD03L ASSIGNING -TABNAME. ENDLOOP. ENDIF. *=====================================================* * AT LINE-SELECTION * *=====================================================* AT LINE-SELECTION. IF REP_3 EQ ‘X’. SET PARAMETER ID ‘DTB’ FIELD SY-LISEL+0(15). CALL TRANSACTION ‘SE11’ AND SKIP FIRST SCREEN. ENDIF. Time for the pictures…
![]()
![]()



New NetWeaver Information at SAP.com
Very Helpfull