0% found this document useful (0 votes)
107 views

SQL Tuning

This document discusses SQL tuning techniques and provides examples of queries that could benefit from tuning. It explains how to create a PLAN_TABLE to view query execution plans and analyze performance. Two case studies are presented showing queries with performance issues and the tuned versions with improved performance metrics. The goal is to demonstrate how to tune queries using available techniques and understand query execution plans.

Uploaded by

honorioraquel
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
107 views

SQL Tuning

This document discusses SQL tuning techniques and provides examples of queries that could benefit from tuning. It explains how to create a PLAN_TABLE to view query execution plans and analyze performance. Two case studies are presented showing queries with performance issues and the tuned versions with improved performance metrics. The goal is to demonstrate how to tune queries using available techniques and understand query execution plans.

Uploaded by

honorioraquel
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 60

SQL TUNING

SQL TUNING
OBJETIVO: Verificar atravs de alguns exemplos reais como possvel efetuar o tuning de queries SQL usando algumas tcnicas disponveis.

SQL TUNING
O QUE PRECISO ? Conhecer a aplicao

Ter sua PLAN_TABLE


Conhecer algumas tcnicas teis

SQL TUNING
PLAN_TABLE

SQL TUNING
CRIANDO SUA PLAN_TABLE (I)

Ref.: DB2 ADMINISTRATION GUIDE

SQL TUNING
CRIANDO SUA PLAN_TABLE (II)

CREATE TABLE USER.PLAN_TABLE LIKE DB2PRD.PLAN_TABLE IN DBUSER.TSUSER

SQL TUNING

SQL TUNING

SQL TUNING

SQL TUNING

SQL TUNING

SQL TUNING

SQL TUNING

e outras.....

SQL TUNING
CASOS PRTICOS

SQL TUNING
QUERY
EXPLAIN ALL SET QUERYNO = # FOR ...Sua query SQL....

CONSULTA
SELECT * FROM PLAN_TABLE ORDER BY 1, 2, 5;

SQL TUNING

Ref.: DB2 Administration Guide

SQL TUNING
CASO 1: -- 01/02/07 TOP 25 REPORTED USAGE 1098 -- 01/02/07 APPTUNE ELAPSED TIME 36 MIN 32 SEC - CPU TIME 08 MIN 43 SEC -- 01/02/07 HIT RLF -- 01/03/07 TOP 25 REPORTED USAGE 1073 -- 01/03/07 APPTUNE ELAPSED TIME 06 MIN 51 SEC - CPU TIME 04 MIN 15 SEC -- 01/03/07 HIT RLF SELECT DISTINCT AL2.EMP_DISCON_DATE ,AL2.EMP_EFFECT_DATE ,AL2.FINANC_ADMIN_CODE ,AL2.DIVISION_CODE ,AL2.LAST_ALTER_TMS ,AL2.EMP_SER_NUM ,AL2.EMP_LAST_NAME ,AL2.EMP_INITIALS FROM BIBMSTS.REBAL_RESOURCE AL1, BMSIW.EMP_MASTER_FILE_FV AL2 WHERE (AL1.SERIALNUMBER = AL2.EMP_SER_NUM) AND (AL2.COUNTRY_CODE = '897' AND AL2.COMPANY_CODE = 'IBM' AND AL2.EMP_DISCON_DATE >= '20051231' AND Date(AL1.DB2_INSERT) in (SELECT max(date(db2_insert)) from bibmsts.rebal_resource ) AND (NOT AL1.SERIALNUMBER IS NULL) AND (AL2.DIVISION_CODE = '07' OR AL2.DIVISION_CODE IS NULL)) FOR FETCH ONLY

SQL TUNING
QUERY QB PL NO NO NO ----- -- --1 1 1 1 1 2 1 1 3 1 1 4 1 2 1 1 2 2 TS LOC MOD --N N N P R F S S COL FN EVA --MIX OP SEQ --0 0 0 0 0 0 M E T -0 1 1 3 0 3

CASO 1... CONT.

S TB AC MT ACCESS IX N TNAME NO TP CO NAME ON U ------------------ --- -- -- ------------ -- CTRY_CMPNY_AUTH 4 I 3 CCAUTHP Y N EMP_MASTER_FILE 2 I 2 EMPMAIX2 N N REBAL_RESOURCE 1 R 0 N N 0 0 N N REBAL_RESOURCE 3 R 0 N N 0 0 N N

S N J N N N N N N

S N O N N N N N N

S N G N N N N N N

S C U N N N Y N Y

S C J N N N N N N

S C O N N N N N Y

S C G N N N N N N

N S

SQL TUNING Caso 1... Cont.


CASO 1: -- 01/02/07 TOP 25 REPORTED USAGE 1098 -- 01/02/07 APPTUNE ELAPSED TIME 36 MIN 32 SEC - CPU TIME 08 MIN 43 SEC -- 01/02/07 HIT RLF -- 01/03/07 TOP 25 REPORTED USAGE 1073 -- 01/03/07 APPTUNE ELAPSED TIME 06 MIN 51 SEC - CPU TIME 04 MIN 15 SEC -- 01/03/07 HIT RLF SELECT DISTINCT AL2.EMP_DISCON_DATE ,AL2.EMP_EFFECT_DATE ,AL2.FINANC_ADMIN_CODE ,AL2.DIVISION_CODE ,AL2.LAST_ALTER_TMS ,AL2.EMP_SER_NUM ,AL2.EMP_LAST_NAME ,AL2.EMP_INITIALS FROM BIBMSTS.REBAL_RESOURCE AL1, BMSIW.EMP_MASTER_FILE_FV AL2 WHERE (AL1.SERIALNUMBER = AL2.EMP_SER_NUM) AND (AL2.COUNTRY_CODE = '897' AND AL2.COMPANY_CODE = 'IBM' AND AL2.EMP_DISCON_DATE >= '20051231' AND Date(AL1.DB2_INSERT) in (SELECT max(date(db2_insert)) from bibmsts.rebal_resource ) AND (NOT AL1.SERIALNUMBER IS NULL) AND (AL2.DIVISION_CODE = '07' OR AL2.DIVISION_CODE IS NULL)) FOR FETCH ONLY

SQL TUNING CASO 1 ...CONT.


SELECT COUNT(*) FROM BIBMSTS.REBAL_RESOURCE COL1 ----------14886

*** END ***

S N COL COL C U TBNAME CREATOR COLNAME NO TYP LEN A L ------------------+--------+------------------+---+---+----+--+-+ REBAL_RESOURCE BIBMSTS CREATOR 1 CHA 30 0 Y DATECREATED 2 TIM 10 0 Y SERIALNUMBER 3 CHA 6 0 Y NAME 4 CHA 50 0 Y RESOURCETYPE 5 CHA 30 0 Y ORGANIZATION 6 CHA 50 0 Y CHALLENGECAT 7 CHA 30 0 Y STATUS 8 CHA 30 0 Y DISPOSITION 9 CHA 30 0 Y ACCOUNT 10 CHA 50 0 Y REGSTATUS 11 CHA 30 0 Y LOCATION 12 CHA 30 0 Y STATE 13 CHA 30 0 Y COUNTRY 14 CHA 30 0 Y DIRECTOR 15 CHA 30 0 Y MANAGERNAME 16 CHA 30 0 Y POSITION 17 CHA 30 0 Y JOBFAMILY 18 CHA 30 0 Y

SQL TUNING Caso 1... soluo


SELECT DISTINCT AL2.EMP_DISCON_DATE ,AL2.EMP_EFFECT_DATE ,AL2.FINANC_ADMIN_CODE ,AL2.DIVISION_CODE ,AL2.LAST_ALTER_TMS ,AL2.EMP_SER_NUM ,AL2.EMP_LAST_NAME ,AL2.EMP_INITIALS FROM (SELECT DISTINCT SERIALNUMBER FROM BIBMSTS.REBAL_RESOURCE WHERE (NOT SERIALNUMBER IS NULL) AND DATE(DB2_INSERT) IN (SELECT MAX(DATE(DB2_INSERT)) FROM BIBMSTS.REBAL_RESOURCE )) AS AL1, BMSIW.EMP_MASTER_FILE_FV AL2 WHERE (AL1.SERIALNUMBER = AL2.EMP_SER_NUM) AND (AL2.COUNTRY_CODE = '897' AND AL2.COMPANY_CODE = 'IBM' AND AL2.EMP_DISCON_DATE >= '20051231' AND (AL2.DIVISION_CODE = '07' OR AL2.DIVISION_CODE IS NULL)) FOR FETCH ONLY

TOTAL CPU TIME= .01 TOTAL ELAPSED TIME= .09 (in minutes) - RECORDS in the final report: about 2340 (including headers)

SQL TUNNING
EXPLAIN
QUERY NO ----2 2 2 2 2 2 2 2 TS P LOC R MOD F --- N N S N L QB PL NO NO -- --1 1 1 2 1 3 1 4 2 1 2 2 3 1 3 2 COL MIX FN OP EVA SEQ --- --0 0 0 0 N S 0 0 N S 0 0 M E T -0 1 4 3 0 3 0 3

caso1... Cont

S TB AC MT ACCESS IX N TNAME NO TP CO NAME ON U ------------------ --- -- -- ------------ -- CTRY_CMPNY_AUTH 5 I 3 CCAUTHP Y N AL1 1 R 0 N N EMP_MASTER_FILE 2 I 3 EMPMAIP1 N N 0 0 N N REBAL_RESOURCE 3 R 0 N N 0 0 N N REBAL_RESOURCE 4 R 0 N N 0 0 N N ACC JOI ACC -PG JOI PGR PAR HINT TB DEG ID DEG ID MOD OPTHINT USED TP --- --- --- --- --- -------- -------- -- T - W - T - - T - - T - -

S N J N N N N N N N N

S N O N N N N N N N N

S N G N N N N N N N N

S C U N N N Y N Y N Y

S C J N N Y N N N N N

S C O N N N N N N N Y

S C G N N N N N N N N

SQL TUNING caso 2 ...


-- 12/29/06 TOP 25 REPORTED USAGE 462 -- 12/29/06 APPTUNE ELAPSED TIME 01 HR 24 MIN - CPU TIME 25 MIN 55 SEC -- 12/29/06 HIT RLF SELECT AL1.LEDGER_YEAR_NUM ,AL1.LEDGER_MONTH_NUM ,AL1.ORIG_COUNTRY_CD ,AL1.ORIG_EMP_NUM ,AL1.OWNING_COUNTRY_CD ,AL1.ACCOUNT_DPT_ID ,AL1.WEEK_ENDING_DATE ,AL1.SERVICE_TYP_CD ,AL1.SERVICE_CD ,AL1.LEGAL_CONTRACT_ID ,AL1.ACCOUNT_ID ,AL1.ORIG_DPT_ID ,AL1.ORIG_LAST_NAME ,AL1.STD_UNIT_PRICE_AMT ,AL1.SERVICE_GROUP_ID ,AL1.FINCHG_MAJ_NUM ,AL1.FINREL_LERU_ID ,Sum(AL1.USAGE_QTY) ,Sum(AL1.STD_TOT_CHRG_AMT) ,Sum(AL1.USAGE_QTY * 0.125) ,AL1.CHRG_GROUP_CD

SQL TUNING
......... FROM BDWDM.CHRG_HIST_UV AL1, BMSIW.ACCOUNT_UV AL2 WHERE (AL2.ACCOUNT_ID = AL1.ACCOUNT_ID AND AL2.OWNING_COUNTRY_CD = AL1.OWNING_COUNTRY_CD) AND ((AL1.ORIG_COUNTRY_CD = '706' OR AL1.OWNING_COUNTRY_CD = '706') AND AL1.LEDGER_MONTH_NUM = MONTH(CURRENT DATE) AND AL1.LEDGER_YEAR_NUM = Year(CURRENT DATE)) GROUP BY AL1.LEDGER_YEAR_NUM, AL1.LEDGER_MONTH_NUM, AL1. ORIG_COUNTRY_CD, AL1.ORIG_EMP_NUM, AL1.OWNING_COUNTRY_CD, AL1. ACCOUNT_DPT_ID, AL1.WEEK_ENDING_DATE, AL1.SERVICE_TYP_CD, AL1. SERVICE_CD, AL1.LEGAL_CONTRACT_ID, AL1.ACCOUNT_ID, AL1. ORIG_DPT_ID, AL1.ORIG_LAST_NAME, AL1.STD_UNIT_PRICE_AMT, AL1. SERVICE_GROUP_ID, AL1.FINCHG_MAJ_NUM, AL1.FINREL_LERU_ID, AL1. CHRG_GROUP_CD, AL2.STATUS, AL2.DATE_OPENED, AL2.DATE_CLOSED, AL2.ACCT_TYP_CD, AL2.CHRG_DEPT_ID, AL2.SOW_TYP_CD, AL1. LEDGER_FG, AL2.CONTACT_UID, AL2.CONTACT_EMP_NUM, AL2. CUSTOMER_NO, AL2.CONTACT_NAME, AL2.ACCOUNT_NAME, AL2. PM_COMPANY_CD, AL2.PM_COUNTRY_CD, AL2.PM_SER_NUM, AL2. APRVR_COMPANY_CD, AL2.APRVR_COUNTRY_CD, AL2.APRVR_SER_NUM, AL2. LBR_BILL_AMT, AL2.BILL_CURRENCY_CD, AL2.TOTAL_HOURS, AL2. PROJ_EXP_BILL_AMT HAVING (NOT Sum(AL1.USAGE_QTY) = 0) AND (NOT Sum(AL1.STD_TOT_CHRG_AMT) = 0) AND (NOT Sum(AL1.USAGE_QTY * 0.125) = 0) UNION ALL

caso 2... Cont.

SQL TUNING caso 2... Cont.


........... FROM BDWDM.CHRG_HIST_UV AL1, BMSIW.ACCOUNT_UV AL2 WHERE (AL2.ACCOUNT_ID = AL1.ACCOUNT_ID AND AL2.OWNING_COUNTRY_CD = AL1.OWNING_COUNTRY_CD) AND AL1.OWNING_COUNTRY_CD = '706' AND AL1.LEDGER_MONTH_NUM = 12 AND AL1.LEDGER_YEAR_NUM = 2006 GROUP BY AL1.LEDGER_YEAR_NUM, AL1.LEDGER_MONTH_NUM, AL1. ORIG_COUNTRY_CD, AL1.ORIG_EMP_NUM, AL1.OWNING_COUNTRY_CD, AL1. ACCOUNT_DPT_ID, AL1.WEEK_ENDING_DATE, AL1.SERVICE_TYP_CD, AL1. SERVICE_CD, AL1.LEGAL_CONTRACT_ID, AL1.ACCOUNT_ID, AL1. ORIG_DPT_ID, AL1.ORIG_LAST_NAME, AL1.STD_UNIT_PRICE_AMT, AL1. SERVICE_GROUP_ID, AL1.FINCHG_MAJ_NUM, AL1.FINREL_LERU_ID, AL1. CHRG_GROUP_CD, AL2.STATUS, AL2.DATE_OPENED, AL2.DATE_CLOSED, AL2.ACCT_TYP_CD, AL2.CHRG_DEPT_ID, AL2.SOW_TYP_CD, AL1. LEDGER_FG, AL2.CONTACT_UID, AL2.CONTACT_EMP_NUM, AL2. CUSTOMER_NO, AL2.CONTACT_NAME, AL2.ACCOUNT_NAME, AL2. PM_COMPANY_CD, AL2.PM_COUNTRY_CD, AL2.PM_SER_NUM, AL2. APRVR_COMPANY_CD, AL2.APRVR_COUNTRY_CD, AL2.APRVR_SER_NUM, AL2. LBR_BILL_AMT, AL2.BILL_CURRENCY_CD, AL2.TOTAL_HOURS, AL2. PROJ_EXP_BILL_AMT HAVING (NOT SUM(AL1.USAGE_QTY) = 0) AND (NOT SUM(AL1.STD_TOT_CHRG_AMT) = 0) ORDER BY 3, 4, 5, 6, 7, 8, 9, 10, 11 FOR FETCH ONLY

SQL TUNING caso 2 ... Cont.


M QUERY QB PL E TB AC MT ACCESS IX NO NO NO T TNAME NO TP CO NAME ON ----- -- --- -- ------------------ --- -- -- ------------ -3 1 1 0 CHRG_HIST 1 I 1 CHRGHSX1 N 1 2 4 ACCOUNT 2 I 2 ACCOUNT_PX N 1 3 3 0 0 N 1 4 3 0 0 N 2 1 0 CTRY_CMPNY_AUTH 3 I 1 CCAUTHP Y 3 1 0 ACCOUNT 2 I 0 ACCOUNT_IX2 N 3 2 4 CHRG_HIST 1 I 2 CHRGHSX2 N 3 3 3 0 0 N 4 1 0 CTRY_CMPNY_AUTH 3 I 1 CCAUTHP Y S N U N N N N N N N N N S N J N N N N N N N N N S N O N N N N N N N N N S N G N N N N N N N N N S C U N N N N N N N N N S C J N Y N N N N Y N N S C O N N N Y N N N N N S C G N N Y N N N N Y N

TS LOC MOD --N N

P R F S L

COL FN EVA ---

S N N N L S

MIX OP SEQ --0 0 0 0 0 0 0 0

SQL TUNING caso 2... Cont.


---------- -------- -- -- -- --- ---- --- ------------------ -------- ACCOUNT ACCOUNT_ D N N 69 1 1 CONTROL_GROUP_CD 17 A 2 36 ACCTGRP_ID 1212416 A * ACCOUNT ACCOUNT_ D N N 52 1 2 6 CONTACT_UID 7 CONTACT_NODE 43422 A 5248 A * ACCOUNT ACCOUNT ACCOUNT_ D ACCOUNT_ D N N N N 44 44 1 2 3 4 5 6 1 14 15 17 12 13 CONTROL_GROUP_CD OWNING_COUNTRY_CD OWNING_COMPANY_CD STATUS OWNING_DIV_CD OWNING_DEPT_ID 17 68 77 7 158 30464 A A A A A A * ACCOUNT ACCOUNT_ U Y Y 98 1 2 1 CONTROL_GROUP_CD 2 ACCOUNT_ID 17 A 2808606 A * ACCOUNT ACCOUNT ACCOUNTL D ACCOUNTL D N N N N
*

68 68

1 2 3

37 CONTROL_COUNTRY_CD 36 ACCTGRP_ID 13 OWNING_DEPT_ID

70 A 1212416 A 30464 A

SQL TUNING caso2... Soluo


SELECT ....... ...................... FROM BDWDM.CHRG_HIST_UV AL1, BMSIW.ACCOUNT_UV AL2 WHERE (AL2.ACCOUNT_ID = AL1.ACCOUNT_ID AND AL2.CONTROL_GROUP_CD = AL1.CONTROL_GROUP_CD ADDED PREDICATE AND AL2.OWNING_COUNTRY_CD = AL1.OWNING_COUNTRY_CD) AND (AL1.ORIG_COUNTRY_CD = '706' AND AL1.ORIG_COMPANY_CD = 'IBM') -- ADDED PREDICATE AND AL1.LEDGER_MONTH_NUM = 12 AND AL1.LEDGER_YEAR_NUM = 2006 GROUP BY AL1.LEDGER_YEAR_NUM, AL1.LEDGER_MONTH_NUM, AL1. ORIG_COUNTRY_CD, AL1.ORIG_EMP_NUM, AL1.OWNING_COUNTRY_CD, AL1. ACCOUNT_DPT_ID, AL1.WEEK_ENDING_DATE, AL1.SERVICE_TYP_CD, AL1. SERVICE_CD, AL1.LEGAL_CONTRACT_ID, AL1.ACCOUNT_ID, AL1. ORIG_DPT_ID, AL1.ORIG_LAST_NAME, AL1.STD_UNIT_PRICE_AMT, AL1. SERVICE_GROUP_ID, AL1.FINCHG_MAJ_NUM, AL1.FINREL_LERU_ID, AL1. CHRG_GROUP_CD, AL2.STATUS, AL2.DATE_OPENED, AL2.DATE_CLOSED, AL2.ACCT_TYP_CD, AL2.CHRG_DEPT_ID, AL2.SOW_TYP_CD, AL1. LEDGER_FG, AL2.CONTACT_UID, AL2.CONTACT_EMP_NUM, AL2. CUSTOMER_NO, AL2.CONTACT_NAME, AL2.ACCOUNT_NAME, AL2. PM_COMPANY_CD, AL2.PM_COUNTRY_CD, AL2.PM_SER_NUM, AL2. APRVR_COMPANY_CD, AL2.APRVR_COUNTRY_CD, AL2.APRVR_SER_NUM, AL2. LBR_BILL_AMT, AL2.BILL_CURRENCY_CD, AL2.TOTAL_HOURS, AL2. PROJ_EXP_BILL_AMT ..........................................

TOTAL CPU TIME= 2.09 TOTAL ELAPSED TIME= 2.76 (in minutes) and the final report had about 77800 lines (including headers).

SQL TUNING caso 2... Cont.


M S S S S S S S S QUERY QB PL E TB AC MT ACCESS IX N N N N C C C C NO NO NO T TNAME NO TP CO NAME ON U J O G U J O G -----+--+---+--+------------------+---+--+--+------------+--+-+-+-+-+-+-+-+-+ 4 1 1 0 CHRG_HIST 1 I 2 CHRGHSX1 N N N N N N N N N 1 2 1 ACCOUNT 2 I 2 ACCOUNT_PX N N N N N N N N N 1 3 3 0 0 N N N N N N N N Y 1 4 3 0 0 N N N N N N N Y N 2 1 0 CTRY_CMPNY_AUTH 3 I 1 CCAUTHP Y N N N N N N N N 3 1 0 CHRG_HIST 1 I 0 CHRGHSX1 N N N N N N N N N 3 2 1 ACCOUNT 2 I 2 ACCOUNT_PX N N N N N N N N N 3 3 3 0 0 N N N N N N N N Y 4 1 0 CTRY_CMPNY_AUTH 3 I 1 CCAUTHP Y N N N N N N N N

Notar mudana de ndices...

SQL TUNING caso 3...


CASO 3: -- 01/09/07 TOP 25 REPORTED USAGE 749 -- 01/09/07 APPTUNE ELAPSED TIME 30 MIN 38 SEC - CPU TIME 12 MIN 36 SEC -- 01/09/07 HIT RLF SELECT AL3.EMP_LAST_NM ,AL3.EMP_FIRST_NM ,AL1.EMP_NOTES_ID ,AL3.PDM_LAST_NM ,AL3.PDM_FIRST_NM ,AL3.PDM_NOTES_ID ,AL3.RDM_LAST_NM ,AL3.RDM_FIRST_NM ,AL3.RDM_NOTES_ID ,AL3.INDSTRY_NM ,AL3.PROF_INFO_DESC ,AL3.GEO_CD ,AL3.CTRY_DESC ,AL2.PRCTNR_EMP_NUM ,AL4.DPT_ID ,AL3.BUS_UNIT_DESC

SQL TUNING caso 3... Cont.


.. FROM PDTIW.EMPLOYEE_UV AL1, PDTIW.PRACTITIONER_UV AL2, BMSIW. DEPT_REF_UV AL5, PDTDM.JOB_ROLE_SKLST_IUV AL6, PDTIW. EMP_DATAMART_UV AL3 LEFT OUTER JOIN BMSIW.EMF_DATAMART_FV AL4 ON AL3.CTRY_CD = AL4.CTRY_CD AND AL3.EMP_SER_NUM = AL4.EMP_SER_NUM AND AL3.EMP_CMPNY_CD = AL4.CMPNY_CD WHERE (AL1.EMP_SER_NUM = AL3.EMP_SER_NUM AND AL1.EMP_CTRY_ID = AL3.EMP_CTRY_ID AND AL1.EMP_CMPNY_CD = AL3.EMP_CMPNY_CD AND AL3.EMP_SER_NUM = AL2.PRCTNR_EMP_NUM AND AL3.EMP_CTRY_ID = AL2.PRCTNR_CTRY_ID AND AL3.EMP_CMPNY_CD = AL2.PRCTNR_CMPNY_CD AND AL5.DPT_ID = AL1.DPT_ID AND AL1.EMP_CMPNY_CD = AL5.COMPANY_CD AND AL1.EMP_CTRY_CD = AL5.COUNTRY_CD AND AL6.EMP_SER_NUM = AL3.EMP_SER_NUM AND AL6.EMP_CTRY_ID = AL3.EMP_CTRY_ID AND AL6.EMP_CMPNY_CD = AL3.EMP_CMPNY_CD) AND (AL3.EMP_EFF_DT <= CURRENT DATE AND (AL3.EMP_DISCON_DT > CURRENT DATE OR AL3.EMP_DISCON_DT = '0001-01-01') AND AL3.GEO_CD = 'AP' AND AL3.REGION_NM = 'Greater China Group AND AL5.DPT_TYP_CD = 'HR' AND AL6.PRI_JOB_ROLE_IND = 'Y' AND AL6.PRI_SKL_SET_IND = 'Y' AND AL3.EMF_LOB_ID IN('ITS', 'SO ')) FOR FETCH ONLY

SQL TUNING caso 3... Cont.


QUERY QB PL NO NO NO ----- -- --2 1 1 2 1 2 2 1 3 2 1 4 2 1 5 2 1 6 2 1 7 2 1 8 2 1 9 2 1 10 2 8 1 2 8 2 M E T -0 1 1 1 1 1 1 1 1 1 0 1 S TB AC MT ACCESS IX N TNAME NO TP CO NAME ON U ------------------ --- -- -- ------------ -- CTRY_CMPNY_AUTH 9 I 1 CCAUTHD1 Y N JOB_ROLE_SKLST 13 I 2 JOBRLP02 N N EMP_DATAMART 15 I 3 EMPDMP01 N N PRACTITIONER 10 I 3 PRCTP01 N N EMPLOYEE 8 I 3 EMPP01 N N CTRY_CMPNY_AUTH 11 I 3 CCAUTHD1 Y N DEPT_REF 12 I 1 IXDPTR1A N N CTRY_CMPNY_AUTH 14 I 3 CCAUTHP Y N CTRY_CMPNY_AUTH 16 I 3 CCAUTHD1 Y N DSNWFQB(08) 6 R 0 N N CTRY_CMPNY_AUTH 18 I 1 CCAUTHP Y N EMF_DATAMART 17 I 2 XNFTDUEMFD1A N N S N J N N N N N N N N N N N N S N O N N N N N N N N N N N N S N G N N N N N N N N N N N N S C U N N N N N N N N N N N N S C J N N N N N N N N N N N N S C O N N N N N N N N N N N N S C G N N N N N N N N N N N N

SQL TUNING caso 3... Cont.


.. FROM PDTIW.EMPLOYEE_UV AL1, PDTIW.PRACTITIONER_UV AL2, BMSIW. DEPT_REF_UV AL5, PDTDM.JOB_ROLE_SKLST_IUV AL6, PDTIW. EMP_DATAMART_UV AL3 LEFT OUTER JOIN BMSIW.EMF_DATAMART_FV AL4 ON AL3.CTRY_CD = AL4.CTRY_CD AND AL3.EMP_SER_NUM = AL4.EMP_SER_NUM AND AL3.EMP_CMPNY_CD = AL4.CMPNY_CD WHERE (AL1.EMP_SER_NUM = AL3.EMP_SER_NUM AND AL1.EMP_CTRY_ID = AL3.EMP_CTRY_ID AND AL1.EMP_CMPNY_CD = AL3.EMP_CMPNY_CD AND AL3.EMP_SER_NUM = AL2.PRCTNR_EMP_NUM AND AL3.EMP_CTRY_ID = AL2.PRCTNR_CTRY_ID AND AL3.EMP_CMPNY_CD = AL2.PRCTNR_CMPNY_CD AND AL5.DPT_ID = AL1.DPT_ID AND AL1.EMP_CMPNY_CD = AL5.COMPANY_CD AND AL1.EMP_CTRY_CD = AL5.COUNTRY_CD AND AL6.EMP_SER_NUM = AL3.EMP_SER_NUM AND AL6.EMP_CTRY_ID = AL3.EMP_CTRY_ID AND AL6.EMP_CMPNY_CD = AL3.EMP_CMPNY_CD) AND (AL3.EMP_EFF_DT <= CURRENT DATE AND (AL3.EMP_DISCON_DT > CURRENT DATE OR AL3.EMP_DISCON_DT = '0001-01-01') AND AL3.GEO_CD = 'AP' AND AL3.REGION_NM = 'Greater China Group AND AL5.DPT_TYP_CD = 'HR' AND AL6.PRI_JOB_ROLE_IND = 'Y' AND AL6.PRI_SKL_SET_IND = 'Y' AND AL3.EMF_LOB_ID IN('ITS', 'SO ')) FOR FETCH ONLY

SQL TUNING caso 3... Cont.


INDICES: UN TBNAME IXNAME RU ------------- -------- -EMP_DATAMART EMPDMP01 P CL NG -N O CL CL COL COL R ED PCT SEQ NO COLNAME COLCARDF D -- --- ---- --- ------------------ -------- N 76 1 1 EMP_SER_NUM 292540 A 2 2 EMP_CTRY_ID 69 A 3 3 EMP_CMPNY_CD 70 A * EMP_DATAMART EMPDMP02 D Y Y 98 1 2 3 2 EMP_CTRY_ID 3 EMP_CMPNY_CD 1 EMP_SER_NUM 69 A 70 A 292540 A

SQL TUNING CASO 3... CONT.


COLUNAS: COL TBNAME CREATOR COLNAME NO ------------------ -------- ------------------ --GEO_RGN_CTRY BMSIW RGN_LVL1_NM 1 RGN_LVL1_CD 2 RGN_LVL2_NM 3 RGN_LVL2_CD 4 RGN_LVL3_NM 5 RGN_LVL3_CD 6 CTRY_CD 7 CTRY_DESC 8 S N D COL C U E TYP LEN A L F --- ---- -- - CHA 30 0 N Y CHA 2 0 N Y CHA 30 0 N Y CHA 2 0 N Y CHA 30 0 Y Y CHA 4 0 N Y CHA 3 0 N N CHA 30 0 N Y

SQL TUNING Caso 3... Cont.

COL COL TBNAME CREATOR COLNAME NO TYP LEN ------------------ -------- ------------------ --- --- ---COUNTRY_REF BMSIW COUNTRY_CD 1 CHA 3 COUNTRY_DESC 2 CHA 30 COUNTRY_ID 3 CHA 2 CURRENCY_CD 4 CHA 3 DATE_FORMAT_CD 5 CHA 3 CCS_ID 6 CHA 5 DBCS_FG 7 CHA 1 DATE_SEPAR_SYMBL 8 CHA 1 SUB_RGN_CD 9 CHA 4 CIAS_COUNTRY_CD 10 CHA 3 CONTROL_COUNTRY_CD 11 CHA 3 CONTROL_COMPANY_CD 12 CHA 8 CONTROL_LOC_CD 13 CHA 3 STATUS 14 CHA 1 UPDATED_BY_NODE 15 CHA 8 UPDATED_BY_UID 16 CHA 8 COMMENT_TEXT 17 CHA 72 RESERVED 18 CHA 25 UPDATED_AT_TS 19 TIM 10 ISO_COUNTRY_CD 20 CHA 3 TRIGGER_UID 21 CHA 8 QMF_REF_ID 22 CHA 12 NAT_LANG_CD 23 CHA 6

SQL TUNING caso 3... Soluo.


........ FROM (SELECT COUNTRY_ID, COUNTRY_CD FROM BMSIW.GEO_RGN_CTRY ,BMSIW.COUNTRY_REF WHERE RGN_LVL1_CD = 'AP' AND RGN_LVL3_CD = 'GCG' AND COUNTRY_CD = CTRY_CD) AS AL7, PDTIW.EMPLOYEE_UV AL1, PDTIW.PRACTITIONER_UV AL2, BMSIW. DEPT_REF_UV AL5, PDTDM.JOB_ROLE_SKLST_IUV AL6, PDTIW. EMP_DATAMART_UV AL3 LEFT OUTER JOIN BMSIW.EMF_DATAMART_FV AL4 ON AL3.CTRY_CD = AL4.CTRY_CD AND AL3.EMP_SER_NUM = AL4.EMP_SER_NUM AND AL3.EMP_CMPNY_CD = AL4.CMPNY_CD WHERE (AL1.EMP_SER_NUM = AL3.EMP_SER_NUM AND AL1.EMP_CTRY_ID = AL3.EMP_CTRY_ID AND AL1.EMP_CMPNY_CD = AL3.EMP_CMPNY_CD AND AL3.EMP_SER_NUM = AL2.PRCTNR_EMP_NUM AND AL3.EMP_CTRY_ID = AL2.PRCTNR_CTRY_ID AND AL3.EMP_CMPNY_CD = AL2.PRCTNR_CMPNY_CD AND AL5.DPT_ID = AL1.DPT_ID AND AL5.DIV_CD = AL1.DIV_ID -- ADDED PREDICATE AND AL1.EMP_CMPNY_CD = AL5.COMPANY_CD AND AL1.EMP_CTRY_CD = AL5.COUNTRY_CD AND AL6.EMP_SER_NUM = AL3.EMP_SER_NUM AND AL6.EMP_CTRY_ID = AL3.EMP_CTRY_ID AND AL6.EMP_CMPNY_CD = AL3.EMP_CMPNY_CD) AND (AL3.EMP_EFF_DT <= CURRENT DATE AND (AL3.EMP_DISCON_DT > CURRENT DATE OR AL3.EMP_DISCON_DT = '0001-01-01') AND AL3.EMP_CTRY_ID = AL7.COUNTRY_ID AND AL5.DPT_TYP_CD = 'HR' AND AL6.PRI_JOB_ROLE_IND = 'Y' AND AL6.PRI_SKL_SET_IND = 'Y' AND AL3.EMF_LOB_ID IN('ITS', 'SO')) FOR FETCH ONLY

TOTAL CPU TIME= 4.81 TOTAL ELAPSED TIME= 5.67

SQL TUNING Caso3... Cont.

QUERY QB PL NO NO NO ----- -- --1 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 9 1 1 9 2 M E T -0 1 1 1 1 1 1 1 1 1 1 1 1 1 S TB AC MT ACCESS IX N TNAME NO TP CO NAME ON U ------------------ --- -- -- ------------ -- COUNTRY_REF 2 I 0 IXCTRYB N N CTRY_CMPNY_AUTH 12 I 2 CCAUTHD1 Y N GEO_RGN_CTRY 1 I 1 RGNREFU1 N N JOB_ROLE_SKLST 16 I 2 JOBRLP02 N N EMP_DATAMART 18 I 3 EMPDMP01 N N EMPLOYEE 11 I 3 EMPP01 N N PRACTITIONER 13 I 3 PRCTP01 N N CTRY_CMPNY_AUTH 14 I 3 CCAUTHD1 Y N DEPT_REF 15 I 5 IXDPTR1A N N CTRY_CMPNY_AUTH 17 I 3 CCAUTHP Y N CTRY_CMPNY_AUTH 19 I 3 CCAUTHD1 Y N DSNWFQB(09) 9 R 0 N N CTRY_CMPNY_AUTH 21 I 1 CCAUTHP Y N EMF_DATAMART 20 I 2 XNFTDUEMFD1A N N S N J N N N N N N N N N N N N N N S N O N N N N N N N N N N N N N N S N G N N N N N N N N N N N N N N S C U N N N N N N N N N N N N N N S C J N N N N N N N N N N N N N N S C O N N N N N N N N N N N N N N S C G N N N N N N N N N N N N N N

SQL TUNING
CASO 4:
-- 01/05/07 TOP 25 REPORTED USAGE 363 -- 01/05/07 APPTUNE ELAPSED TIME 13 MIN 51 SEC - CPU TIME 08 MIN 22 SEC -- 01/05/07 HIT RLF SELECT AL1.SENT_TO_CLR_DATE ,SUM(AL1.TOTAL_HRS_EXPENDED) ,AL1.ACTIVITY_CD ,AL1.WORK_ITEM_ID ,AL1.EMP_LAST_NAME ,AL1.EMP_INITIALS ,AL1.ACCOUNT_ID ,AL1.EMP_LEVEL_CODE ,AL1.EMP_STATUS ,AL1.WEEK_ENDING_DATE ,AL1.EMP_SER_NUM ,AL1.EMP_DEPT_NUMBER

..........................

SQL TUNING CASO 4... CONT.


FROM BMSIW.EMP_LABOR_FV AL1, BMSIW.WORK_ITEMS_UV AL2, BMSIW. LEDGER_PROJECT_UV AL3, BMSIW.DEPT_REF_UV AL4 WHERE (AL2.WORK_ITEM_ID = AL1.WORK_ITEM_ID AND AL2.SITE_LOC_ID = AL1.SITE_LOC_ID AND AL1.GROUP_ID = AL2.GROUP_ID AND AL3.LEDGER_PROJECT_ID = AL1.LEDGER_PROJECT_ID AND AL3.OWNING_COMPANY_CD = AL1.EMP_COMPANY_CODE AND AL3.OWNING_COUNTRY_CD = AL1.COUNTRY_CODE AND AL4.DIV_CD = AL1.DIVISION_CODE AND AL4.COUNTRY_CD = AL1.COUNTRY_CODE AND AL4.COMPANY_CD = AL1.EMP_COMPANY_CODE) AND ((AL1.EMP_COMPANY_CODE = 'IBM' AND AL1.COUNTRY_CODE = '897' AND AL1.CONTROL_GROUP_CD IN('NA1', 'NA2') AND AL3.APPCODE IN('EQD', 'EQF', 'EQQ', 'EQW', 'EQX')) AND AL1.WEEK_ENDING_DATE > '2005-12-24' AND AL4.DPT_ID = SUBSTR(BMSIW.EMP_LABOR_FV.EMP_DEPT_NUMBER, 1, 3) AND AL4.DPT_ID = AL1.EMP_DEPT_NUMBER AND AL4.DPT_TYP_CD = 'FIN') GROUP BY AL1.SENT_TO_CLR_DATE, AL1.ACTIVITY_CD, AL1.WORK_ITEM_ID, AL1 .EMP_LAST_NAME, AL1.EMP_INITIALS, AL1.ACCOUNT_ID, AL1. EMP_LEVEL_CODE, AL1.EMP_STATUS, AL1.WEEK_ENDING_DATE, AL1. EMP_SER_NUM, AL1.EMP_DEPT_NUMBER, AL4.MAJ_NUM, AL1.OVERTIME_IND , AL1.LEDGER_PROJECT_ID, AL1.BURDEN_CD, AL1.SENT_TO_DPAM_DATE, AL3.COMMENT_TEXT, AL1.LONGEVITY_CODE, AL1.PROFESSION_CODE, AL1. ACTV_LBR_DESC, AL1.DIVISION_CODE, AL1.GROUP_ID, AL2. WORK_ITEM_TITLE, AL1.FINANC_ADMIN_CODE, AL3.APPCODE, AL1. FINANC_ADMIN_CODE, AL1.COUNTRY_CODE FOR FETCH ONLY

SQL TUNING caso 4... Cont.


M S S S S S S S S QUERY QB PL E TB AC MT ACCESS IX N N N N C C C C NO NO NO T TNAME NO TP CO NAME ON U J O G U J O G ----- -- --- -- ------------------ --- -- -- ------------ -- - - - - - - - 4 1 1 0 AL5 3 R 0 N N N N N N N N N 4 1 2 1 DEPT_REF 5 I 5 IXDPTR1A N N N N N N N N N 4 1 3 1 WORK_ITEMS 4 I 3 WORKITI2 N N N N N N N N N 4 1 4 1 CTRY_CMPNY_AUTH 8 I 3 CCAUTHP Y N N N N N N N N 4 2 1 0 CTRY_CMPNY_AUTH 6 I 3 CCAUTHP Y N N N N N N N N 4 2 2 1 CTRY_CMPNY_AUTH 7 I 3 CCAUTHP Y N N N N N N N N 4 2 3 1 LEDGER_PROJECT 2 I 0 LEDGER_PROJE N N N N N N N N N 4 2 4 1 LABOR 1 I 3 LABORIX8 N N N N N N N N N 4 2 5 3 0 0 N N N N N N N N Y TS LOC MOD --N N N N N N N N P R F S COL FN EVA ---

S L S

Aparentemente tudo bem... excepto...

SQL TUNING CASO 4... CONT.


FROM BMSIW.EMP_LABOR_FV AL1, BMSIW.WORK_ITEMS_UV AL2, BMSIW. LEDGER_PROJECT_UV AL3, BMSIW.DEPT_REF_UV AL4 WHERE (AL2.WORK_ITEM_ID = AL1.WORK_ITEM_ID AND AL2.SITE_LOC_ID = AL1.SITE_LOC_ID AND AL1.GROUP_ID = AL2.GROUP_ID AND AL3.LEDGER_PROJECT_ID = AL1.LEDGER_PROJECT_ID AND AL3.OWNING_COMPANY_CD = AL1.EMP_COMPANY_CODE AND AL3.OWNING_COUNTRY_CD = AL1.COUNTRY_CODE AND AL4.DIV_CD = AL1.DIVISION_CODE AND AL4.COUNTRY_CD = AL1.COUNTRY_CODE AND AL4.COMPANY_CD = AL1.EMP_COMPANY_CODE) AND ((AL1.EMP_COMPANY_CODE = 'IBM' AND AL1.COUNTRY_CODE = '897' AND AL1.CONTROL_GROUP_CD IN('NA1', 'NA2') AND AL3.APPCODE IN('EQD', 'EQF', 'EQQ', 'EQW', 'EQX')) AND AL1.WEEK_ENDING_DATE > '2005-12-24' AND AL4.DPT_ID = SUBSTR(BMSIW.EMP_LABOR_FV.EMP_DEPT_NUMBER, 1, 3) AND AL4.DPT_ID = AL1.EMP_DEPT_NUMBER AND AL4.DPT_TYP_CD = 'FIN') GROUP BY AL1.SENT_TO_CLR_DATE, AL1.ACTIVITY_CD, AL1.WORK_ITEM_ID, AL1 .EMP_LAST_NAME, AL1.EMP_INITIALS, AL1.ACCOUNT_ID, AL1. EMP_LEVEL_CODE, AL1.EMP_STATUS, AL1.WEEK_ENDING_DATE, AL1. EMP_SER_NUM, AL1.EMP_DEPT_NUMBER, AL4.MAJ_NUM, AL1.OVERTIME_IND , AL1.LEDGER_PROJECT_ID, AL1.BURDEN_CD, AL1.SENT_TO_DPAM_DATE, AL3.COMMENT_TEXT, AL1.LONGEVITY_CODE, AL1.PROFESSION_CODE, AL1. ACTV_LBR_DESC, AL1.DIVISION_CODE, AL1.GROUP_ID, AL2. WORK_ITEM_TITLE, AL1.FINANC_ADMIN_CODE, AL3.APPCODE, AL1. FINANC_ADMIN_CODE, AL1.COUNTRY_CODE FOR FETCH ONLY

SQL TUNING Caso 4 ... Cont.


SELECT AL5.SENT_TO_CLR_DATE ,SUM_TOTAL_HRS_EXP ,AL5.ACTIVITY_CD ,AL5.WORK_ITEM_ID ,AL5.EMP_LAST_NAME ,AL5.EMP_INITIALS ,AL5.ACCOUNT_ID .. FROM (SELECT AL1.SENT_TO_CLR_DATE ,SUM(AL1.TOTAL_HRS_EXPENDED) AS SUM_TOTAL_HRS_EXP ,AL1.ACTIVITY_CD ,AL1.WORK_ITEM_ID ,AL1.EMP_LAST_NAME ,AL1.EMP_INITIALS ,AL1.ACCOUNT_ID ,AL1.EMP_LEVEL_CODE ..........

SQL TUNING Caso 4... Soluo.


,AL1.EMP_COMPANY_CODE FROM BMSIW.EMP_LABOR_FV AL1, BMSIW.LEDGER_PROJECT_UV AL3 WHERE APPCODE IN('EQD', 'EQF', 'EQQ', 'EQW', 'EQX') AND OWNING_COUNTRY_CD = '897' AND OWNING_COMPANY_CD = 'IBM' AND AL3.LEDGER_PROJECT_ID = AL1.LEDGER_PROJECT_ID AND AL3.OWNING_COMPANY_CD = AL1.EMP_COMPANY_CODE AND AL3.OWNING_COUNTRY_CD = AL1.COUNTRY_CODE AND CONTROL_GROUP_CD IN('NA1', 'NA2') AND AL1.WEEK_ENDING_DATE > '2005-12-24' GROUP BY AL1.SENT_TO_CLR_DATE, AL1.ACTIVITY_CD, AL1.WORK_ITEM_ID, AL1 .EMP_LAST_NAME, AL1.EMP_INITIALS, AL1.ACCOUNT_ID, AL1. EMP_LEVEL_CODE, AL1.EMP_STATUS, AL1.WEEK_ENDING_DATE, AL1. EMP_SER_NUM, AL1.EMP_DEPT_NUMBER, AL1.OVERTIME_IND ,AL1.LEDGER_PROJECT_ID, AL1.BURDEN_CD, AL1.SENT_TO_DPAM_DATE, AL3.COMMENT_TEXT, AL1.LONGEVITY_CODE, AL1.PROFESSION_CODE, AL1. ACTV_LBR_DESC, AL1.DIVISION_CODE, AL1.GROUP_ID, AL1.FINANC_ADMIN_CODE, AL3.APPCODE, AL1.COUNTRY_CODE, AL1.SITE_LOC_ID,AL1.EMP_COMPANY_CODE ) AS AL5, BMSIW.WORK_ITEMS_UV AL2, BMSIW.DEPT_REF_UV AL4 WHERE AL2.WORK_ITEM_ID = AL5.WORK_ITEM_ID AND AL2.SITE_LOC_ID = AL5.SITE_LOC_ID AND AL5.GROUP_ID = AL2.GROUP_ID AND AL4.DIV_CD = AL5.DIVISION_CODE AND AL4.COUNTRY_CD = AL5.COUNTRY_CODE AND AL4.COMPANY_CD = AL5.EMP_COMPANY_CODE AND AL4.DPT_ID = SUBSTR(AL5.EMP_DEPT_NUMBER, 1, 3) AND AL4.DPT_TYP_CD = 'FIN' FOR FETCH ONLY

TOTAL CPU TIME= .18 TOTAL ELAPSED TIME= 2.50 (in minutes)

SQL TUNING Caso 4... Cont.


M S S S S S S S S QUERY QB PL E TB AC MT ACCESS IX N N NO NO NO T TNAME NO TP CO NAME ON U J ----- -- --- -- ------------------ --- -- -- ------------ -- - 4 1 1 0 AL5 3 R 0 N N N 4 1 2 1 DEPT_REF 5 I 5 IXDPTR1A N N N 4 1 3 1 WORK_ITEMS 4 I 3 WORKITI2 N N N 4 1 4 1 CTRY_CMPNY_AUTH 8 I 3 CCAUTHP Y N N 4 2 1 0 CTRY_CMPNY_AUTH 6 I 3 CCAUTHP Y N N 4 2 2 1 CTRY_CMPNY_AUTH 7 I 3 CCAUTHP Y N N 4 2 3 1 LEDGER_PROJECT 2 I 0 LEDGER_PROJE N N N 4 2 4 1 LABOR 1 I 3 LABORIX8 N N N 4 2 5 3 0 0 N N N N O N N N N N N N N N N G N N N N N N N N N C U N N N N N N N N N C J N N N N N N N N N C O N N N N N N N N N C G N N N N N N N N Y

SQL TUNING Caso 5...


CASO 5: -- 01/10/07 TOP 25 REPORTED USAGE 3105 -- 01/10/07 APPTUNE ELAPSED TIME 41 MIN 38 SEC - CPU TIME 16 MIN 33 SEC -- 01/11/07 TOP 25 REPORTED USAGE 2849 -- 01/11/07 APPTUNE ELAPSED TIME 02 HRS 27 MIN - CPU TIME 28 MIN 24 SEC -- 01/12/07 TOP 25 REPORTED USAGE 1835 -- 01/12/07 APPTUNE ELAPSED TIME 57 MIN 53 SEC - CPU TIME 21 MIN 31 SEC -- 01/15/06 TOP 25 REPORTED USAGE 1915 -- 01/15/06 APPTUNE ELAPSED TIME 32 MIN 20 SEC - CPU TIME 14 MIN 54 SEC SELECT AL3.IBM_GEO_ID ,AL3.RGN_DESC ,AL2.CTRY_DESC ,AL4.BUS_UNIT_DESC ,AL15.LBR_RPT_IND ,AL1.EMP_LAST_NM ,AL1.EMP_FIRST_NM ,AL7.EMF_LOB_CD ,AL6.EMP_LAST_NM ,AL6.EMP_FIRST_NM ,AL8.EMP_LAST_NM ,AL8.EMP_FIRST_NM ,AL9.CONCT_S_CMPNT_DESC ..............................

SQL TUNING Caso 5... Cont.


FROM JOIN ON AND JOIN ON AND AND JOIN ON AND AND JOIN ON JOIN ON AND AND JOIN ON AND AND JOIN ON AND AND JOIN ON JOIN ON JOIN ON JOIN ON PDTIW.COUNTRY_V AL2, PDTIW.REGION_V AL3, PDTIW.EMP_DATAMART_V AL16, PDTIW.EMPLOYEE_V AL1 LEFT OUTER PDTIW.BUS_UNIT_V AL4 AL1.LOB_CD = AL4.LOB_CD AL1.BUS_UNIT_ID = AL4.BUS_UNIT_ID LEFT OUTER PDTIW.PRCTNR_EMF_LOB_V AL7 AL1.EMP_SER_NUM = AL7.PRCTNR_EMP_NUM AL1.EMP_CTRY_ID = AL7.PRCTNR_CTRY_ID AL1.EMP_CMPNY_CD = AL7.PRCTNR_CMPNY_CD LEFT OUTER PDTIW.CONC_SKL_DTL_V AL10 AL1.EMP_SER_NUM = AL10.PRCTNR_EMP_NUM AL1.EMP_CTRY_ID = AL10.PRCTNR_CTRY_ID AL1.EMP_CMPNY_CD = AL10.PRCTNR_CMPNY_CD LEFT OUTER PDTIW.CONCTRTN_SKLCMP_V AL9 AL10.CONCT_SKL_CMPNT_ID = AL9.CONCT_SKL_CMPNT_ID LEFT OUTER BMSIW.EMF_DATAMART_V AL15 AL1.EMP_SER_NUM = AL15.EMP_SER_NUM AL1.EMP_CMPNY_CD = AL15.CMPNY_CD AL1.EMP_CTRY_CD = AL15.CTRY_CD, PDTIW.PRACTITIONER_V AL5 LEFT OUTER PDTIW.EMPLOYEE_V AL6 AL5.PDM_EMP_NUM = AL6.EMP_SER_NUM AL5.PDM_CTRY_ID = AL6.EMP_CTRY_ID AL5.PDM_CMPNY_CD = AL6.EMP_CMPNY_CD LEFT OUTER PDTIW.EMPLOYEE_V AL8 AL5.RDM_EMP_NUM = AL8.EMP_SER_NUM AL5.RDM_CTRY_ID = AL8.EMP_CTRY_ID AL5.RDM_CMPNY_CD = AL8.EMP_CMPNY_CD LEFT OUTER PDTIW.INDUSTRY_V AL12 AL5.PRI_INDSTRY_CD = AL12.INDSTRY_CD LEFT OUTER PDTIW.INDSTRY_SCTR_V AL11 AL12.INDSTRY_SCTR_CD = AL11.INDSTRY_SCTR_CD LEFT OUTER PDTIW.PROF_INFO_V AL13 AL5.CMPTNCY_ID = AL13.PROF_INFO_ID LEFT OUTER PDTIW.PROF_INFO_V AL14 AL5.CMPTNCY_SEG_ID = AL14.PROF_INFO_ID

16 tabelas no JOIN

SQL TUNING Caso 5... Cont.


WHERE AND AND AND AND AND AND AND AND AND AND AND AND FOR (AL1.EMP_CTRY_ID = AL2.ISO_CTRY_ID AL2.RGN_ID = AL3.RGN_ID AL2.IBM_GEO_ID = AL3.IBM_GEO_ID AL1.EMP_SER_NUM = AL5.PRCTNR_EMP_NUM AL1.EMP_CTRY_ID = AL5.PRCTNR_CTRY_ID AL1.EMP_CMPNY_CD = AL5.PRCTNR_CMPNY_CD AL1.EMP_SER_NUM = AL16.EMP_SER_NUM AL1.EMP_CTRY_ID = AL16.EMP_CTRY_ID AL1.EMP_CMPNY_CD = AL16.EMP_CMPNY_CD) ((NOT AL1.EMP_EMAIL_ID = 'left IBM') AL3.IBM_GEO_ID IN('AM', 'AP', 'EN', 'EW') AL1.LOB_CD = 'IGA' AL9.SKL_TYP_ID = 2) FETCH ONLY ;

SQL TUNING Caso 5... Cont.


QUERY QB PL NO NO NO ----- --- --1 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 3 1 1 3 2 1 3 3 1 3 4 1 3 5 1 13 1 1 14 1 M E T -0 2 1 2 2 2 2 2 2 2 2 2 0 2 2 2 2 0 0 S TB AC MT ACCESS IX N TNAME NO TP CO NAME ON U ------------------ --- -- -- -------- -- COUNTRY_V 1 R 0 N N REGION_V 2 R 0 N N PRACTITIONER_V 26 R 0 N N EMPLOYEE_V 25 R 0 N N EMPLOYEE_V 27 R 0 N N INDUSTRY_V 23 R 0 N N INDSTRY_SCTR_V 21 R 0 N N DSNWFQB(03) 6 R 0 N N EMF_DATAMART_V 7 R 0 N N EMP_DATAMART_V 3 R 0 N N PROF_INFO_V 17 R 0 N N PROF_INFO_V 19 R 0 N N EMPLOYEE_V 14 R 0 N N BUS_UNIT_V 15 R 0 N N PRCTNR_EMF_LOB_V 13 R 0 N N CONC_SKL_DTL_V 11 R 0 N N CONCTRTN_SKLCMP_V 9 R 0 N N COUNTRY 28 R 0 N N REGION 29 R 0 N N S N J N Y N Y Y Y Y Y Y Y Y Y N Y Y Y Y N N S N O N N N N N N N N N N N N N N N N N N N S N G N N N N N N N N N N N N N N N N N N N S C U N N N N N N N N N N N N N N N N N N N S C J N Y N Y Y Y Y Y Y Y Y Y N Y Y Y Y N N S C O N N N N N N N N N N N N N N N N N N N S C G N N N N N N N N N N N N N N N N N N N

SQL TUNING Caso 5... Cont.


1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 16 17 18 19 20 21 22 23 24 25 26 27 28 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 EMP_DATAMART EMF_DATAMART CONCTRTN_SKLCMP CONC_SKL_DTL PRCTNR_EMF_LOB EMPLOYEE EMPLOYEE EMPLOYEE BUS_UNIT PROF_INFO PROF_INFO INDSTRY_SCTR INDUSTRY 30 31 32 33 34 35 36 37 38 39 40 41 42 R R R R R I R R R R R R R 0 0 0 0 0 1 EMPD02 0 0 0 0 0 0 0 0 N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N

0 PRACTITIONER

43 R

N N N N N N N N

tablespace scan em quase tudo !!!

SQL TUNING Caso 5... Cont.


FROM JOIN ON AND JOIN ON AND AND JOIN ON AND AND JOIN ON JOIN ON AND AND JOIN ON AND AND JOIN ON AND AND JOIN ON JOIN ON JOIN ON JOIN ON PDTIW.COUNTRY_V AL2, PDTIW.REGION_V AL3, PDTIW.EMP_DATAMART_V AL16, PDTIW.EMPLOYEE_V AL1 LEFT OUTER PDTIW.BUS_UNIT_V AL4 AL1.LOB_CD = AL4.LOB_CD AL1.BUS_UNIT_ID = AL4.BUS_UNIT_ID LEFT OUTER PDTIW.PRCTNR_EMF_LOB_V AL7 AL1.EMP_SER_NUM = AL7.PRCTNR_EMP_NUM AL1.EMP_CTRY_ID = AL7.PRCTNR_CTRY_ID AL1.EMP_CMPNY_CD = AL7.PRCTNR_CMPNY_CD LEFT OUTER PDTIW.CONC_SKL_DTL_V AL10 AL1.EMP_SER_NUM = AL10.PRCTNR_EMP_NUM AL1.EMP_CTRY_ID = AL10.PRCTNR_CTRY_ID AL1.EMP_CMPNY_CD = AL10.PRCTNR_CMPNY_CD LEFT OUTER PDTIW.CONCTRTN_SKLCMP_V AL9 AL10.CONCT_SKL_CMPNT_ID = AL9.CONCT_SKL_CMPNT_ID LEFT OUTER BMSIW.EMF_DATAMART_V AL15 AL1.EMP_SER_NUM = AL15.EMP_SER_NUM AL1.EMP_CMPNY_CD = AL15.CMPNY_CD AL1.EMP_CTRY_CD = AL15.CTRY_CD, PDTIW.PRACTITIONER_V AL5 LEFT OUTER PDTIW.EMPLOYEE_V AL6 AL5.PDM_EMP_NUM = AL6.EMP_SER_NUM AL5.PDM_CTRY_ID = AL6.EMP_CTRY_ID AL5.PDM_CMPNY_CD = AL6.EMP_CMPNY_CD LEFT OUTER PDTIW.EMPLOYEE_V AL8 AL5.RDM_EMP_NUM = AL8.EMP_SER_NUM AL5.RDM_CTRY_ID = AL8.EMP_CTRY_ID AL5.RDM_CMPNY_CD = AL8.EMP_CMPNY_CD LEFT OUTER PDTIW.INDUSTRY_V AL12 AL5.PRI_INDSTRY_CD = AL12.INDSTRY_CD LEFT OUTER PDTIW.INDSTRY_SCTR_V AL11 AL12.INDSTRY_SCTR_CD = AL11.INDSTRY_SCTR_CD LEFT OUTER PDTIW.PROF_INFO_V AL13 AL5.CMPTNCY_ID = AL13.PROF_INFO_ID LEFT OUTER PDTIW.PROF_INFO_V AL14 AL5.CMPTNCY_SEG_ID = AL14.PROF_INFO_ID

SQL TUNING Caso 5... Soluo.


SELECT AL1.IBM_GEO_ID ,AL1.RGN_DESC ,AL1.CTRY_DESC ,AL4.BUS_UNIT_DESC ,AL15.LBR_RPT_IND ,AL1.EMP_LAST_NM ,AL1.EMP_FIRST_NM ,AL7.EMF_LOB_CD ,AL6.EMP_LAST_NM .. FROM PDTIW.EMP_DATAMART_V AL16, (SELECT AL2.ISO_CTRY_ID ,AL3.IBM_GEO_ID ,AL3.RGN_DESC ,AL2.CTRY_DESC ,AL2.RGN_ID ,AL1.EMP_SER_NUM ,AL1.EMP_LAST_NM ,AL1.EMP_FIRST_NM ,AL1.EMP_CTRY_ID ,AL1.EMP_CTRY_CD ,AL1.EMP_CMPNY_CD ,AL1.BUS_UNIT_ID ,AL1.LOB_CD ,AL1.DPT_ID ,AL1.EMP_NOTES_ID FROM PDTIW.COUNTRY_V AL2, PDTIW.REGION_V AL3, PDTIW.EMPLOYEE_V AL1

SQL TUNING Caso 5... Soluo.


WHERE AL2.RGN_ID = AL3.RGN_ID AND AL2.IBM_GEO_ID = AL3.IBM_GEO_ID AND AL3.IBM_GEO_ID IN('AM', 'AP', 'EN', 'EW') AND AL1.EMP_CTRY_ID = AL2.ISO_CTRY_ID AND AL2.RGN_ID = AL3.RGN_ID AND AL2.IBM_GEO_ID = AL3.IBM_GEO_ID AND (NOT AL1.EMP_EMAIL_ID = 'LEFT IBM') AND AL3.IBM_GEO_ID IN('AM', 'AP', 'EN', 'EW') AND AL1.LOB_CD = 'IGA') AS AL1 LEFT OUTER PDTIW.BUS_UNIT_V AL4 AL1.LOB_CD = AL4.LOB_CD AL1.BUS_UNIT_ID = AL4.BUS_UNIT_ID LEFT OUTER PDTIW.PRCTNR_EMF_LOB_V AL7 AL1.EMP_SER_NUM = AL7.PRCTNR_EMP_NUM AL1.EMP_CTRY_ID = AL7.PRCTNR_CTRY_ID AL1.EMP_CMPNY_CD = AL7.PRCTNR_CMPNY_CD LEFT OUTER PDTIW.CONC_SKL_DTL_V AL10 AL1.EMP_SER_NUM = AL10.PRCTNR_EMP_NUM AL1.EMP_CTRY_ID = AL10.PRCTNR_CTRY_ID AL1.EMP_CMPNY_CD = AL10.PRCTNR_CMPNY_CD LEFT OUTER PDTIW.CONCTRTN_SKLCMP_V AL9 AL10.CONCT_SKL_CMPNT_ID = AL9.CONCT_SKL_CMPNT_ID LEFT OUTER

JOIN ON AND JOIN ON AND AND JOIN ON AND AND JOIN ON

SQL TUNING Caso 5... Soluo.


JOIN ON AND AND JOIN ON AND AND JOIN ON AND AND JOIN ON JOIN ON JOIN ON JOIN ON WHERE AND AND AND AND AND AND FOR BMSIW.EMF_DATAMART_V AL15 AL1.EMP_SER_NUM = AL15.EMP_SER_NUM AL1.EMP_CMPNY_CD = AL15.CMPNY_CD AL1.EMP_CTRY_CD = AL15.CTRY_CD, PDTIW.PRACTITIONER_V AL5 LEFT OUTER PDTIW.EMPLOYEE_V AL6 AL5.PDM_EMP_NUM = AL6.EMP_SER_NUM AL5.PDM_CTRY_ID = AL6.EMP_CTRY_ID AL5.PDM_CMPNY_CD = AL6.EMP_CMPNY_CD LEFT OUTER PDTIW.EMPLOYEE_V AL8 AL5.RDM_EMP_NUM = AL8.EMP_SER_NUM AL5.RDM_CTRY_ID = AL8.EMP_CTRY_ID AL5.RDM_CMPNY_CD = AL8.EMP_CMPNY_CD LEFT OUTER PDTIW.INDUSTRY_V AL12 AL5.PRI_INDSTRY_CD = AL12.INDSTRY_CD LEFT OUTER PDTIW.INDSTRY_SCTR_V AL11 AL12.INDSTRY_SCTR_CD = AL11.INDSTRY_SCTR_CD LEFT OUTER PDTIW.PROF_INFO_V AL13 AL5.CMPTNCY_ID = AL13.PROF_INFO_ID LEFT OUTER PDTIW.PROF_INFO_V AL14 AL5.CMPTNCY_SEG_ID = AL14.PROF_INFO_ID AL1.EMP_SER_NUM = AL5.PRCTNR_EMP_NUM AL1.EMP_CTRY_ID = AL5.PRCTNR_CTRY_ID AL1.EMP_CMPNY_CD = AL5.PRCTNR_CMPNY_CD AL1.EMP_SER_NUM = AL16.EMP_SER_NUM AL1.EMP_CTRY_ID = AL16.EMP_CTRY_ID AL1.EMP_CMPNY_CD = AL16.EMP_CMPNY_CD AL9.SKL_TYP_ID = 2 TOTAL CPU TIME= 1.11 TOTAL FETCH ONLY ;

ELAPSED TIME= 1.77 (in minutes).

SQL TUNING Caso 5... Cont.


QUERY NO ----2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 QB PL NO NO -- --1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 3 1 3 2 3 3 3 4 3 5 ** 1 ** 2 ** 3 M E T -0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 S TB AC MT ACCESS IX N TNAME NO TP CO NAME ON U ------------------ --- -- -- ------------ -- DSNWFQB(03) 4 R 0 N N EMP_DATAMART 29 I 3 EMPDMP02 N N EMF_DATAMART 30 I 3 XNFTDUEMFD1A N N PRACTITIONER 41 I 3 PRCTP01 N N EMPLOYEE 40 I 3 EMPP01 N N EMPLOYEE 39 I 3 EMPP01 N N INDUSTRY 38 I 1 INDP01 N N INDSTRY_SCTR 37 I 1 INDSCP01 N N PROF_INFO 36 I 1 PROFLP01 N N PROF_INFO 35 I 1 PROFLP01 N N AL1 12 R 0 N N BUS_UNIT 34 I 2 BUNITP01 N N PRCTNR_EMF_LOB 33 I 3 PREMFP01 N N CONC_SKL_DTL 32 I 3 PDSKLP05 N N CONCTRTN_SKLCMP 31 I 1 CONCSP01 N N EMPLOYEE 28 I 1 EMPD02 N N COUNTRY 26 I 1 CTRYP01 N N REGION 27 I 2 RGNP01 N N S N J N N N N N N N N N N N N N N N N N N S N O N N N N N N N N N N N N N N N N N N S N G N N N N N N N N N N N N N N N N N N S C U N N N N N N N N N N N N N N N N N N S C J N N N N N N N N N N N N N N N N N N S C O N N N N N N N N N N N N N N N N N N S C G N N N N N N N N N N N N N N N N N N

SQL TUNING Caso 6.


SELECT SE.TIPO, CI.CODIGO, CI.GRUPO, CI.DATA DM.CLASSE, SUM(CI.VALOR),0,0,0 FROM CI, SE, DM, TC WHERE CI.CLASSE = DM.CLASSE AND CI.CODIGO = TC.CODIGO AND CI.TIPO = SE.TIPO AND TC.CODIGO _BASE = T AND CI.DATA IN (SELECT MAX(CI.TDATA) FROM CI CI2 WHERE condies ..) GROUP BY SE,TIPO, CI.CODIGO, CI.GRUPO, CI.DATA, DM.CLASSE UNION SELECT SE.TIPO, CI.CODIGO, CI.GRUPO, CI.DATA DM.CLASSE, SUM(CI.VALOR),0,0,0 FROM CI, SE, DM, TC WHERE CI.CLASSE = DM.CLASSE AND CI.CODIGO = TC.CODIGO AND CI.TIPO = SE.TIPO AND TC.CODIGO _BASE = DE AND CI.DATA IN (SELECT MAX(CI.TDATA) FROM CI CI2 WHERE condies ..) GROUP BY SE,TIPO, CI.CODIGO, CI.GRUPO, CI.DATA, DM.CLASSE UNION SELECT SE.TIPO, CI.CODIGO, CI.GRUPO, CI.DATA DM.CLASSE, SUM(CI.VALOR),0,0,0 FROM CI, SE, DM, TC WHERE CI.CLASSE = DM.CLASSE AND CI.CODIGO = TC.CODIGO AND CI.TIPO = SE.TIPO AND TC.CODIGO _SEC = I AND CI.DATA IN (SELECT MAX(CI.TDATA) FROM CI CI2 WHERE condies ..) GROUP BY SE,TIPO, CI.CODIGO, CI.GRUPO, CI.DATA, DM.CLASSE UNION SELECT SE.TIPO, CI.CODIGO, CI.GRUPO, CI.DATA DM.CLASSE, SUM(CI.VALOR),0,0,0 FROM CI, SE, DM, TC WHERE CI.CLASSE = DM.CLASSE AND CI.CODIGO = TC.CODIGO AND CI.TIPO = SE.TIPO AND TC.CODIGO _SEC = DE AND CI.DATA IN (SELECT MAX(CI.TDATA) FROM CI CI2 WHERE condies ..) GROUP BY SE,TIPO, CI.CODIGO, CI.GRUPO, CI.DATA, DM.CLASSE ORDER BY 2, 3, 4

SQL TUNING Caso 6... Cont.


CASE x UNION UNION (UNION ALL) bastante dispensiosa, principalmente, quando cada bloco que constitui a UNION acessa a(s) mesma(s) tabela(s). CASE expression pode substituir, inclusive removendo alguns requerimentos de sintaxe da UNION.

SQL TUNING Caso 6... Soluo


foi substituida pela query abaixo envolvendo uma CASE expression: SELECT SE.TIPO, CI.CODIGO, CI.GRUPO, CI.DATA DM.CLASSE, SUM(CASE WHEN TC.CODIGO_BASE = I THEN CI.VALOR END), SUM(CASE WHEN TC.CODIGO_BASE = DEI THEN CI.VALOR END), SUM(CASE WHEN TC.CODIGO_SEC = I THEN CI.VALOR END), SUM(CASE WHEN TC.CODIGO_SEC = DE THEN CI.VALOR END) FROM CI, SE, DM, TC WHERE CI.CLASSE = DM.CLASSE AND CI.CODIGO = TC.CODIGO AND CI.TIPO = SE.TIPO AND TC.CODIGO _SEC = I AND CI.DATA IN (SELECT MAX(CI.TDATA) FROM CI CI2 WHERE condies ..) GROUP BY SE,TIPO, CI.CODIGO, CI.GRUPO, CI.DATA, DM.CLASSE ORDER BY 2, 3, 4 WITH UR;

Ganho de CPU TIME: cerca de 75%

SQL TUNING

QUESTES ?

SQL TUNING

fim

You might also like