How to Access DB2 Efficiently from FOCUS Michelle Cavanaugh Information Builders Summit 2010 User Conference June 2010 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2009 CIGNA How to Access DB2 Efficiently from FOCUS Agenda Introduction & Level Set Basic FOCUS/DB2 Steps DB2 Optimization Steps Traces How to Optimize FOCUS/DB2 Code Examples Q & A’s 2 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA How to Access DB2 Efficiently from FOCUS CIGNA Corporation is… “An employee benefits company uniquely positioned to help companies succeed and help people enjoy a better quality of life.” Disclaimer: The opinions and conclusions expressed are those of the speaker and not those of CIGNA Corporation. Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA How to Access DB2 Efficiently from FOCUS Introductions & Level Set Me: Installation Troubleshooting Optimization Hardware: 3 IBM z10’s 5 Complexes/Groups 15 LPARs (Logical PARtitions) Software: OS: z/OS 1.10 & 1.11 DB2: 27 SSIDs - V8 New Function Mode (NFM) - V9 Conversion Mode (CM) & NFM FOCUS: 7.3.1 - Production & 7.6.10 - Test 4 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA Basic FOCUS/DB2 Processing 1. FOCUS FOCUS calls requested module (TABLE, GRAPH) Reads & Parses MFD Parses the request (FOCEXEC) Calls the FOCUS/DB2 Interface FOCUS 2. FOCUS/DB2 Interface Reads & Parses the AFD Checks for Optimization – System Level Analyzes & Optimizes the request Creates SELECT statements Prepares, allocates & opens cursors Calls DB2 to FETCH the rows of data FOCUS/DB2 Interface 3. DB2 Analyzes & Optimizes the passed SQL Chooses the access path & retrieval method Retrieves data Creates answer set DB2 5 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA Basic FOCUS/DB2 Processing 4. FOCUS/DB2 Interface DB2 sends 1 row of data or a SQL status message to FOCUS Converts non-standard data into FOCUS formats FOCUS processes are done (IF/WHERE, DEFINEs, etc.) Puts valid rows into the FOCUS Internal Matrix Loops back to get the next row of the DB2 answer set This continues until the end of the answer set – SQL code 100+ (End) FOCUS FOCUS/DB2 Interface 5. FOCUS Processes the Internal Matrix The report is displayed DB2 6 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization Optimization Order 1. Projection & Record Selection – Always Done 2. JOINs 3. SORTs 4. Aggregation - When Required If your code does not pass these steps, your request is not optimized 7 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization 1. Projection & Record Selection – Translates FOCUS to SQL Projection – Specific columns only – SELECT PRINT/SUM/COUNT Fields Objects of JOINs & DEFINEs PRINT * - All columns in Master – Never a SELECT * Record Selection – SQL WHERE DEFINEs – Within a Single Segment YMD or YYMD Date Fields LIKEs - With Same Length or Wildcards (%)* WHERE (T1.<Field> LIKE ‘<Value>’) * If different lengths or no wildcards WHERE (T1.<Field> = ‘<value>’) 8 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization 2. JOIN Optimization JOIN is Optimized: Single SELECT Statement One DB2 Subsystem (SSID) AFD has KEYS >0 Less than 15 TABLEs in a Single JOIN JOIN Optimized = JOIN Order does not matter JOIN is Not Optimized: FOCUS-Managed JOIN Multiple DB2 Subsystems (SSID) MASTER contains an OCCURS DB2 to Fix files JOIN is NOT Optimized = JOIN Order Critical If JOINs Optimizes SORTs are checked 9 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization 3. SORT Optimization SORT is Optimized: SQL ORDER BY SORT on REAL fields SORT on COMPUTE fields before DEFINE fields With FST. & LST. – MFD/AFD KEYs must be correct SORT is Not Optimized if: JOIN was not Optimized Multi-Verb Request ACROSS’s, RETYPE’s, & COMPUTE’s that use Direct Operators Direct Operators that require the Internal Matrix (e.g. TOT.PCT. or RPCT.) If SORT Optimizes Aggregates are checked 10 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization 4. Aggregation Optimization – Optional Why? DB2 is much better at aggregation Less data returned to FOCUS Less Data = Faster FOCUS Processing Aggregates that are Translated to SQL: Verbs (SUM, COUNT & WRITE) Direct Operators: MIN. MAX. AVE. Most DEFINE fields - Constant fields using CNT. - Expressions that return with an arithmetic or character string value Aggregates that DO NOT get Translated to SQL: COUNT with MISSING=ON Multi-verb Requests Aggregation can be turned off via the following command: SQL <engine> SET OPTIMIZATION NO AGGR 11 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA Trace Facility Available Traces 1. STMTRACE – Statement Trace 2. SQLAGGR – SQL Aggregate Trace 3. SQLDI – SQL Details Trace 4. SQLCALL – See All Trace 12 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA Trace Facility 1. STMTRACE All SQL & DDL code All generated SQL code – SELECTs & WHEREs All SQL Data Definition Language (DDL) for CREATEs Output can be saved & Run in native SQL Pre- FOCUS 7.2 = FSTRACE4 2. SQLAGGR JOIN, SORT & Aggregate Optimization Analysis Last optimization level completed Best = “AGGREGATION DONE…” Pre-FOCUS 7.2 = FSTRACE3 13 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA Trace Facility 3. SQLDI Shows All the details SQL Statements DB2 Return Codes (RC) COMMIT & ROLLBACK Commands SQL Cursor Operations Works with ALL FOCUS Requests Pre-FOCUS 7.2 = FSTRACE 4. SQLCALL Shows All Commands & Data exchange between Physical & Logical Layers of the Data Adaptor New with FOCUS 7.2 14 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA Basic Steps to Optimize FOCUS/DB2 Code Optimization Steps: 1. Set up Job for Traces 2. Restrict Record Retrieval 3. Pick your Trace Levels 4. Activate Selected Traces 5. Review Trace Output – Optimization Levels & SQL Code Did you make it to “AGGREGATION DONE…”? If not – Modify your FOCUS code and try again 15 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA Optimization Steps 1. Setup Job for Traces Setup Trace file – FSTRACE Pre-Allocate FSTRACE & Reference in FOCUS JCL: //FSTRACE DD DSN=<file name>, // DCB=(LRECL=80,BLKSIZE=80,RECFM=F), // VOL=SER=<pack name>,SPACE=(CYL,(1,5,5)), // DISP=(NEW,CATLG,DELETE),UNIT=SYSALLDA And in your job... //FSTRACE DD DSN=<file name>,DISP=SHR SYSOUT: //FSTRACE DD SYSOUT=*, DCB=(LRECL=80, BLKSIZE=80,RECFM=F) 16 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA Optimization Steps 2. Restrict Data Retrieval Eliminate Database Retrieval: SET XRETRIEVAL = OFF Limit the Number of Rows Being Read: YES - IF READLIMIT EQ 100 NO - IF RECORDLIMIT EQ 100 3. Pick Your Trace Levels Recommended levels are: STMTRACE & SQLAGGR Use only if absolutely necessary: SQLDI & SQLCALL 17 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA Optimization Steps 4. Activate Selected Traces Start the Trace Facility SET TRACEUSER = ON SET TRACEOFF = ALL Activate the Requested Traces SET TRACEON=SQLAGGR/DB2/FSTRACE SET TRACEON=STMTRACE/DB2/FSTRACE Check Trace Levels: SET TRACEON = ? Execute your FOCUS/DB2 request 18 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA Optimization Steps 5. Review Trace Output You should try for only one SELECT statement There should be WHEREs You should see “AGGREGATION DONE…” If not – return to & try again! 19 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Example: Single TABLE “CIGNA” and the “Tree of Life” logo are registered service marks of CIGNA Intellectual Property, Inc., licensed for use by CIGNA Corporation and its operating subsidiaries. All products and services are provided exclusively by such operating subsidiaries and not by CIGNA Corporation. Such operating subsidiaries include International Rehabilitation Associates, Inc. (Intracorp), CIGNA Behavioral Health, Inc., vielife Limited, Connecticut General Life Insurance Company and HMO subsidiaries of CIGNA Health Corporation. 000000 00/09 © 2010 CIGNA Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2009 CIGNA FOCUS/DB2 Optimization - Setup DB2OPT FOCEXEC -* TURN OFF DATA RETRIEVAL SET XRETRIEVAL = OFF -* ACTIVATE THE TRACE FACILITY SET TRACEUSER=ON SET TRACEOFF=ALL -* ACTIVATE SPECIFIC TRACES SET TRACEON=SQLAGGR/DB2/FSTRACE SET TRACEON=STMTRACE/DB2/FSTRACE -* CHECK TRACE LEVEL SET TRACEON = ? DB2OPT JCL Allocate all the Required FOCUS files and... //* ALLOCATE TRACE FILE //FSTRACE DD DSN=TEST.FOCUS.FSTRACE,DISP=SHR //* //SYSIN DD * EXEC DB2OPT <- Opt Set up EXEC <FOCEXEC to be optimized> FIN /* // <- FSTRACE 21 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Single DB2 TABLE MASTER File Description - MFD $$$ CREATED BY AUTODB2 ON 06/24/04 AT FILENAME=HTRARGEL,SUFFIX=SQLDS,$ SEGNAME='ARGUS_EL',SEGTYPE=S0,$ FIELD=CUST_NUM ,CUST_NUM ,A4 FIELD=CLNT_NUM ,CLNT_NUM ,A4 FIELD=HMO_CD ,HMO_CD ,A3 FIELD=MBR_END_DT ,MBR_END_DT ,A10 MANY MORE FIELDS... 11.47.33 BY XXXX ,A4 ,A4 ,A3 ,A10 ,MISSING=OFF,$ ,MISSING=OFF,$ ,MISSING=OFF,$ ,MISSING=OFF,$ Access File Description - AFD $$$ CREATED BY AUTODB2 ON 06/24/04 AT 11.47.33 BY XXXX $$$ FILENAME=HTRARGEL,SUFFIX=SQLDS,$ SEGNAME='ARGUS_EL', TABLENAME='"WINDSOR2_DB2P"."GHTR"."ARGUS_ELIGIBILITY"', KEYS=04,WRITE=YES,KEYORDER=LOW,$ 22 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Single DB2 TABLE FOCEXEC -SET &THISYY=EDIT(&DATEYYMD,'9999$$$$$$'); <- Date Setup -SET &ENDYY=(&THISYY - 2); -SET &THISMM=EDIT(&DATEYYMD,'$$$$$01$$$'); -SET &THISDD=EDIT(&DATEYYMD,'$$$$$$$$01'); -SET &ENDDT8=(&ENDYY | &THISMM | &THISDD); -SET &ENDDT=EDIT(&ENDDT8,'9999-$01-$01'); -* DEFINE FILE HTRARGEL <- DEFINEs ACCT/A4 = EDIT(SUBACT_NO,'9999$$'); TOSS3501/A1 = IF HMO_CD EQ '200' THEN 'Y' ELSE 'N'; TOSS3502/A1 = IF ACCT FROM '0400' TO '0499' THEN 'Y' ELSE IF ACCT FROM '4800' TO '4999' THEN 'Y' ELSE 'N'; TOSS3503/A2 = TOSS3501|TOSS3502; TOSS350/A1 = IF TOSS3503 EQ 'YY' THEN 'Y' ELSE 'N'; END -* TABLE FILE HTRARGEL <- TABLE Request PRINT CUST_NUM CLNT_NUM HMO_CD SUBACT_NO MBR_END_DT IF CUST_NUM EQ '9999' IF CLNT_NUM NE '9999' IF TOSS350 EQ ‘Y' IF MBR_END_DT GE '&ENDDT' END 23 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Single DB2 TABLE FSTRACE Output (FOC2598) FOCUS IF/WHERE TEST CANNOT BE PASSED TO SQL : TOSS350 (FOC2590) AGGREGATION NOT DONE FOR THE FOLLOWING REASON: (FOC2596) ONE OR MORE EXPRESSION(S) CAN NOT BE TRANSLATED TO SQL SELECT T1."CUST_NUM",T1."CLNT_NUM",T1."HMO_CD",T1."SUBACT_NO", T1."MBR_END_DT" FROM "WINDSOR2_DB2P"."GHTR"."ARGUS_ELIGIBILITY" T1 WHERE (T1."MBR_END_DT" >= '2008-01-01') AND (T1."CLNT_NUM" <> '9999') AND (T1."CUST_NUM" = '9999') FOR FETCH ONLY; FSTRACE Translation Record Selection Failed: (FOC2598) FOCUS IF/WHERE TEST CANNOT BE PASSED TO SQL : TOSS350 Aggregation Failed: (FOC2590) AGGREGATION NOT DONE FOR THE FOLLOWING REASON: (FOC2596) ONE OR MORE EXPRESSION(S) CAN NOT BE TRANSLATED TO SQL The SET’s Passed: WHERE (T1."MBR_END_DT" >= '2008-01-01') 24 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Single DB2 TABLE Original FOCEXEC DEFINE FILE HTRARGEL <- DEFINEs ACCT/A4 = EDIT(SUBACT_NO,'9999$$'); TOSS3501/A1 = IF HMO_CD EQ '200' THEN 'Y' ELSE 'N'; TOSS3502/A1 = IF ACCT FROM '0400' TO '0499' THEN 'Y' ELSE IF ACCT FROM '4800' TO '4999' THEN 'Y' ELSE 'N'; TOSS3503/A2 = TOSS3501|TOSS3502; TOSS350/A1 = IF TOSS3503 EQ 'YY' THEN 'Y' ELSE 'N'; END -* TABLE FILE HTRARGEL <- TABLE PRINT CUST_NUM CLNT_NUM HMO_CD SUBACT_NO MBR_END_DT IF CUST_NUM EQ '9999' IF CLNT_NUM NE '9999' IF TOSS350 EQ ‘Y‘ FIELD not translated to SQL IF MBR_END_DT GE '&ENDDT' END 25 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Single DB2 TABLE Changes: Convert DEFINEs to WHEREs Make sure that you are using REAL fields Modified FOCEXEC DEFINE FILE HTRARGEL ACCT/A4 = EDIT(SUBACT_NO,'9999$$'); END -* TABLE FILE HTRARGEL PRINT CUST_NUM CLNT_NUM HMO_CD SUBACT_NO MBR_END_DT IF CUST_NUM EQ '9999' IF CLNT_NUM NE '9999' -* CHANGE THE DEFINE TO A WHERE WHERE (HMO_CD EQ '200') AND ((ACCT FROM '0400' TO '0499') OR (ACCT FROM '4800' TO '4999')) IF MBR_END_DT GE '&ENDDT' END 26 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Single DB2 TABLE FSTRACE Output (FOC2590) AGGREGATION NOT DONE FOR THE FOLLOWING REASON: (FOC2594) AGGREGATION IS NOT APPLICABLE TO THE VERB USED SELECT T1."CUST_NUM",T1."CLNT_NUM",T1."HMO_CD",T1."SUBACT_NO", T1."MBR_END_DT" FROM "WINDSOR2_DB2P"."GHTR"."ARGUS_ELIGIBILITY" T1 WHERE (T1."MBR_END_DT" >= '2008-01-01') AND (T1."HMO_CD" = '200') AND (T1."CLNT_NUM" <> '9999') AND (T1."CUST_NUM" = '9999') AND (((SUBSTR(T1."SUBACT_NO", 1, 4)) BETWEEN '0400' AND '0499') OR ((SUBSTR(T1."SUBACT_NO", 1, 4)) BETWEEN '4800' AND '4999')) FOR FETCH ONLY; 27 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Example: Multiple TABLEs “CIGNA” and the “Tree of Life” logo are registered service marks of CIGNA Intellectual Property, Inc., licensed for use by CIGNA Corporation and its operating subsidiaries. All products and services are provided exclusively by such operating subsidiaries and not by CIGNA Corporation. Such operating subsidiaries include International Rehabilitation Associates, Inc. (Intracorp), CIGNA Behavioral Health, Inc., vielife Limited, Connecticut General Life Insurance Company and HMO subsidiaries of CIGNA Health Corporation. 000000 00/09 © 2010 CIGNA Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2009 CIGNA FOCUS/DB2 Optimization – Multiple DB2 TABLEs JOIN Code: JOIN NDC_NUM IN HTRACLM TO ALL NDC_NUM IN HTRNDC AS JOIN1 END JOIN CUST_NUM AND CLNT_NUM AND MBR_NO IN HTRACLM TO CUST_NUM AND CLNT_NUM AND MBR_NO IN HTRARGEL AS JOIN2 END JOIN CLM_NUM IN HTRACLM TO CLM_NUM IN HTRCLSTF AS JOIN3 END Active JOINs: ? JOIN JOINS CURRENTLY ACTIVE HOST FIELD FILE TAG ---------NDC_NUM HTRACLM CUST_NUM HTRACLM CLM_NUM HTRACLM CROSSREFERENCE FIELD FILE TAG ---------NDC_NUM HTRNDC CUST_NUM HTRARGEL CLM_NUM HTRCLSTF AS ALL WH ---- -JOIN1 Y N JOIN2 N N JOIN3 N N 29 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Multiple DB2 TABLEs JOIN Structure: HOST JOIN1 JOIN2 JOIN3 30 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Multiple DB2 TABLEs Access File Descriptions - AFDs HOST - HTRACLM $$$ CREATED BY AUTODB2 ON 07/29/04 AT 07.38.29 BY XXXX $$$ FILENAME=HTRACLM,SUFFIX=SQLDS,$ SEGNAME='CLAIM',TABLENAME='"GHTR"."CLAIM"', KEYS=01,WRITE=YES,KEYORDER=LOW,$ JOIN1 - HTRNDC $$$ CREATED BY AUTODB2 ON 09/28/04 AT 11.19.52 BY XXXX $$$ FILENAME=HTRNDC,SUFFIX=SQLDS,$ SEGNAME='NDC',TABLENAME='"GHTR"."NDC"', KEYS=01,WRITE=YES,KEYORDER=LOW,$ JOIN2 - HTRARGE $$$ CREATED BY AUTODB2 ON 06/24/04 AT 11.47.33 BY XXXX $$$ FILENAME=HTRARGEL,SUFFIX=SQLDS,$ SEGNAME='ARGUS_EL', TABLENAME='"WINDSOR2_DB2P"."GHTR"."ARGUS_ELIGIBILITY"', KEYS=04,WRITE=YES,KEYORDER=LOW,$ JOIN3 - HTRCLSTF SEGNAME= HTRCLSTF ,TABLENAME= 'GHTR."CLAIM_STAFF"‘, KEYS= 1 ,WRITE= YES ,$ 31 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Multiple DB2 TABLEs Original FOCEXEC SET ALL=PASS SET ALL -* DEFINE FILE HTRACLM DEFINEs INGRD_CST_AMT/P9.2=IF CLNT_INGRD_CST_AMT GT 0 THEN CLNT_INGRD_CST_AMT ELSE INGRD_CST_AMT ; DISP_FEE/D9.2=IF CLNT_INGRD_CST_AMT GT 0 THEN CLNT_DISP_FEE_AMT ELSE DISP_FEE_AMT ; TOT_PD_AMT/P9.2=IF CLNT_INGRD_CST_AMT GT 0 THEN CLNT_TOT_PD_AMT ELSE TOT_PD_AMT ; FILL/A10=EDIT(FILL_DT,'9999-99-99') ; PAID/A10=EDIT(PAID_DT,'9999-99-99') ; MBR_NO/A12=IF CUST_NUM NE '0215' THEN MBR_NO ELSE IF NEW_MBR_NO EQ ' ' THEN MBR_NO ELSE NEW_MBR_NO ; EMP_ID/A9=EDIT(MBR_NO,'999999999$$$') ; END -* TABLE FILE HTRACLM TABLE Request LIST MBR_NO EMP_ID FILL_DT PAID_DT RX_ACCT_NUM INGRD_CST_AMT DISP_FEE TOT_PD_AMT CUST_NUM CLNT_NUM BY CLM_NUM BY HIGHEST 1 ARGUS_RUN_DT WHERE RX_ACCT_NUM IN ('3209348') AND (PAID_DT GE '2013-01-01') AND (PAID_DT LT '2018-01-01') AND PLAN_OF_BEN IN ('COMP3') AND FUNDNG_SVC_CD EQ '2' ON TABLE HOLD AS HOLD2 END 32 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Multiple DB2 TABLEs FSTRACE Output - #1 (FOC2510) FOCUS-MANAGED JOIN SELECTED FOR FOLLOWING REASON(S): (FOC2519) THE JOINED SEGMENTS RESIDE IN MORE THAN ONE NODE OR SUBSYSTEM (FOC2590) AGGREGATION NOT DONE FOR THE FOLLOWING REASON: (FOC2592) RDBMS-MANAGED JOIN HAS BEEN DISABLED SELECT T1."CLM_NUM",T1."CUST_NUM",T1."CLNT_NUM", T1."RX_ACCT_NUM",T1."PLAN_OF_BEN",T1."MBR_NO", T1."NABP_PHARMCY_NUM",T1."FILL_DT",T1."PAID_DT", T1."COPAY_COIN_AMT",T1."INGRD_CST_AMT",T1."AWP_INGRD_CST_AMT", T1."DISP_FEE_AMT",T1."SALES_TAX_AMT",T1."TOT_PD_AMT", T1."UNC_AMT",T1."NEW_MBR_NO",T1."FUNDNG_SVC_CD" FROM "GHTR"."CLAIM" T1 WHERE (T1."FUNDNG_SVC_CD" = '2') AND (T1."PLAN_OF_BEN" = 'COMP3') AND (T1."PAID_DT" < '2011-01-01') AND (T1."PAID_DT" >= '2006-01-01') AND (T1."RX_ACCT_NUM" = '3209348') FOR FETCH ONLY; SELECT T2."MBR_FRST_NM",T2."MBR_LAST_NM",T2."MBR_BRTH_DT", T2."ARGUS_RUN_DT" FROM "WINDSOR2_DB2P"."GHTR"."ARGUS_ELIGIBILITY" T2 WHERE (T2."CUST_NUM" = ?) AND (T2."CLNT_NUM" = ?) AND (T2."MBR_NO" = ?) FOR FETCH ONLY; SELECT T3."CLNT_INGRD_CST_AMT",T3."CLNT_DISP_FEE_AMT", T3."CLNT_TOT_PD_AMT" FROM GHTR."CLAIM_STAFF" T3 WHERE (T3."CLM_NUM" = ?) FOR FETCH ONLY; 33 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Multiple DB2 TABLEs 1st Change - AFDs (FOC2519) THE JOINED SEGMENTS RESIDE IN MORE THAN ONE NODE OR SUBSYSTEM HOST - HTRACLM SEGNAME='CLAIM',TABLENAME='"GHTR"."CLAIM"', KEYS=01,WRITE=YES,KEYORDER=LOW,$ JOIN1 - HTRNDC SEGNAME='NDC',TABLENAME='"GHTR"."NDC"', KEYS=01,WRITE=YES,KEYORDER=LOW,$ JOIN2 - HTRARGE SEGNAME='ARGUS_EL', TABLENAME='"WINDSOR2_DB2P"."GHTR"."ARGUS_ELIGIBILITY"', KEYS=04,WRITE=YES,KEYORDER=LOW,$ JOIN3 - HTRCLSTF SEGNAME= HTRCLSTF ,TABLENAME= 'GHTR."CLAIM_STAFF"‘, KEYS= 1 ,WRITE= YES ,$ KEYORDER=LOW, $ 34 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Multiple DB2 TABLEs FSTRACE Output - #2 (FOC2510) FOCUS-MANAGED JOIN SELECTED FOR FOLLOWING REASON(S): (FOC2513) OUTER JOIN (ALL=ON or ALL=PASS) CANNOT BE PASSED (FOC2590) AGGREGATION NOT DONE FOR THE FOLLOWING REASON: (FOC2592) RDBMS-MANAGED JOIN HAS BEEN DISABLED SELECT T1."CLM_NUM",T1."CUST_NUM",T1."CLNT_NUM", T1."RX_ACCT_NUM",T1."PLAN_OF_BEN",T1."MBR_NO", T1."NABP_PHARMCY_NUM",T1."FILL_DT",T1."PAID_DT", T1."COPAY_COIN_AMT",T1."INGRD_CST_AMT",T1."AWP_INGRD_CST_AMT", T1."DISP_FEE_AMT",T1."SALES_TAX_AMT",T1."TOT_PD_AMT", T1."UNC_AMT",T1."NEW_MBR_NO",T1."FUNDNG_SVC_CD" FROM "GHTR"."CLAIM" T1 WHERE (T1."FUNDNG_SVC_CD" = '2') AND (T1."PLAN_OF_BEN" = 'COMP3') AND (T1."PAID_DT" < '2011-01-01') AND (T1."PAID_DT" >= '2006-01-01') AND (T1."RX_ACCT_NUM" = '3209348') FOR FETCH ONLY; SELECT T2."MBR_FRST_NM",T2."MBR_LAST_NM",T2."MBR_BRTH_DT", T2."ARGUS_RUN_DT" FROM "GHTR"."ARGUS_ELIGIBILITY" T2 WHERE (T2."CUST_NUM" = ?) AND (T2."CLNT_NUM" = ?) AND (T2."MBR_NO" = ?) FOR FETCH ONLY; SELECT T3."CLNT_INGRD_CST_AMT",T3."CLNT_DISP_FEE_AMT", T3."CLNT_TOT_PD_AMT" FROM GHTR."CLAIM_STAFF" T3 WHERE (T3."CLM_NUM" = ?) FOR FETCH ONLY; 35 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Multiple DB2 TABLEs 2nd Change – ALL Setting (FOC2513) OUTER JOIN (ALL=ON or ALL=PASS) CANNOT BE PASSED Original Code: SET ALL=PASS Optimized Code: Delete the line or SET ALL=OFF/ON The ALL setting handles missing segment instances in a report. OFF = Always tries to Optimizes - DEFAULT ON = Outer JOIN – Missing cross-referenced rows are processed – R 7.0.9 SET <SQL engine> SET SQLJOIN OUTER ON/OFF PASS = Never Optimizes 36 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Multiple DB2 TABLEs FSTRACE Output - #3 (FOC2525) FOREIGN KEY IS NOT A SUPERSET OF PRIMARY KEY FOR SEGMENT: ARGUS_EL (FOC2509) RDBMS-MANAGED JOIN SELECTED BUT RESULTS MAY BE INACCURATE (FOC2524) JOIN TO A UNIQUE SEGMENT DOES NOT COVER ITS PRIMARY KEY (FOC2590) AGGREGATION NOT DONE FOR THE FOLLOWING REASON: (FOC2594) AGGREGATION IS NOT APPLICABLE TO THE VERB USED SELECT T1."CLM_NUM",T1."CUST_NUM",T1."CLNT_NUM", T1."RX_ACCT_NUM",T1."PLAN_OF_BEN",T1."MBR_NO",T1."FILL_DT", T1."PAID_DT",T1."INGRD_CST_AMT",T1."DISP_FEE_AMT", T1."TOT_PD_AMT",T1."NEW_MBR_NO",T1."FUNDNG_SVC_CD", T2."ARGUS_RUN_DT",T3."CLNT_INGRD_CST_AMT", T3."CLNT_DISP_FEE_AMT",T3."CLNT_TOT_PD_AMT" FROM "GHTR"."CLAIM" T1,"GHTR"."ARGUS_ELIGIBILITY" T2,"GHTR"."CLAIM_STAFF" T3 WHERE (T2."CUST_NUM" = T1."CUST_NUM") AND (T2."CLNT_NUM" = T1."CLNT_NUM") AND (T2."MBR_NO" = T1."MBR_NO") AND (T3."CLM_NUM" = T1."CLM_NUM") AND (T1."FUNDNG_SVC_CD" = '2') AND (T1."PLAN_OF_BEN" = 'COMP3') AND (T1."PAID_DT" < '2018-01-01') AND (T1."PAID_DT" >= '2013-01-01') AND (T1."RX_ACCT_NUM" = '3209348') ORDER BY T1."CLM_NUM", T2."ARGUS_RUN_DT" DESC FOR FETCH ONLY; 37 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Multiple DB2 TABLEs 3rd Change – AFD (FOC2525) FOREIGN KEY IS NOT A SUPERSET OF PRIMARY KEY FOR SEGMENT: ARGUS_EL (FOC2509) RDBMS-MANAGED JOIN SELECTED BUT RESULTS MAY BE INACCURATE (FOC2524) JOIN TO A UNIQUE SEGMENT DOES NOT COVER ITS PRIMARY KEY HOST - HTRACLM SEGNAME='CLAIM',TABLENAME='"GHTR"."CLAIM"', KEYS=01,WRITE=YES,KEYORDER=LOW,$ JOIN1 - HTRNDC SEGNAME='NDC',TABLENAME='"GHTR"."NDC"', KEYS=01,WRITE=YES,KEYORDER=LOW,$ JOIN2 - HTRARGEL SEGNAME='ARGUS_EL', TABLENAME='"GHTR"."ARGUS_ELIGIBILITY"', KEYS=04,WRITE=YES,KEYORDER=LOW,$ Too Many Keys – Needs to be 02 JOIN3 - HTRCLSTF SEGNAME= HTRCLSTF ,TABLENAME= ‘”GHTR”."CLAIM_STAFF"‘, KEYS= 01 ,WRITE= YES , KEYORDER=LOW,$ 38 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 Optimization – Multiple DB2 TABLEs FSTRACE Output - #4 – Optimized (FOC2590) AGGREGATION NOT DONE FOR THE FOLLOWING REASON: (FOC2594) AGGREGATION IS NOT APPLICABLE TO THE VERB USED SELECT T1."CLM_NUM",T1."CUST_NUM",T1."CLNT_NUM", T1."RX_ACCT_NUM",T1."PLAN_OF_BEN",T1."MBR_NO",T1."FILL_DT", T1."PAID_DT",T1."INGRD_CST_AMT",T1."DISP_FEE_AMT", T1."TOT_PD_AMT",T1."NEW_MBR_NO",T1."FUNDNG_SVC_CD", T2."ARGUS_RUN_DT",T3."CLNT_INGRD_CST_AMT", T3."CLNT_DISP_FEE_AMT",T3."CLNT_TOT_PD_AMT" FROM "GHTR"."CLAIM" T1,"GHTR"."ARGUS_ELIGIBILITY" T2,"GHTR"."CLAIM_STAFF" T3 WHERE (T2."CUST_NUM" = T1."CUST_NUM") AND (T2."CLNT_NUM" = T1."CLNT_NUM") AND (T2."MBR_NO" = T1."MBR_NO") AND (T3."CLM_NUM" = T1."CLM_NUM") AND (T1."FUNDNG_SVC_CD" = '2') AND (T1."PLAN_OF_BEN" = 'COMP3') AND (T1."PAID_DT" < '2018-01-01') AND (T1."PAID_DT" >= '2013-01-01') AND (T1."RX_ACCT_NUM" = '3209348') ORDER BY T1."CLM_NUM", T2."ARGUS_RUN_DT" DESC FOR FETCH ONLY; 39 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA FOCUS/DB2 & FOCUS Optimization Documentation FOCUS Documentation is Available at: http://documentation.informationbuilders.com/masterindex/doc.asp Current FOCUS/DB2 Documentation: FOCUS for S/390 Relational Data Adapter - User’s Manual - Version 7.2 Document Number: DN1001155.1002 Current Optimization Documentation: FOCUS for S/390 PowerBook - Version 7.0 Document Number: DN1001134.0401 40 Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2010 CIGNA Questions & Answers “CIGNA” and the “Tree of Life” logo are registered service marks of CIGNA Intellectual Property, Inc., licensed for use by CIGNA Corporation and its operating subsidiaries. All products and services are provided exclusively by such operating subsidiaries and not by CIGNA Corporation. Such operating subsidiaries include International Rehabilitation Associates, Inc. (Intracorp), CIGNA Behavioral Health, Inc., vielife Limited, Connecticut General Life Insurance Company and HMO subsidiaries of CIGNA Health Corporation. 000000 00/09 © 2010 CIGNA Confidential, unpublished property of CIGNA. Do not duplicate or distribute. Use and distribution limited solely to authorized personnel. © 2009 CIGNA