07.02.2013 Views

Best Practices for SAP BI using DB2 9 for z/OS - IBM Redbooks

Best Practices for SAP BI using DB2 9 for z/OS - IBM Redbooks

Best Practices for SAP BI using DB2 9 for z/OS - IBM Redbooks

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

10.1 SQL efficiency <strong>for</strong> DSO<br />

Queries against the DSO can be long and complicated. They usually involve<br />

joins to one or more master data tables, as well as local predicates on the master<br />

data tables and DSO. Understanding and analyzing your queries is an important<br />

step in per<strong>for</strong>mance tuning.<br />

In this section we illustrate a method that you can use to break down a query.<br />

This kind of analysis is helpful in determining the requirements <strong>for</strong> indexing,<br />

clustering, partitioning, and statistics collection. Without first breaking down and<br />

simplifying the query, it is not possible to adequately understand these<br />

requirements.<br />

Figure 10-1 shows the query that we analyze in this section. It is a real-life<br />

customer query.<br />

ODS Query Example<br />

SELECT "S____065" , "S____028" , "S____097" , "S____109" , "S____179" , "S____180" , "0ADVERTISNG" , "0G_APRABA" , "0G_ASTDPR" , "0G_AVTRGK" ,<br />

"0G_AVVCDA" , "0G_AVVCDC" , "0G_AVVCHG" , "0G_AVVCTG" , "0G_AVVDED" , "0G_AVVFGT" , "0G_AVVFIX" , "0G_AVVINV" , "0G_AVVIWS" , "0G_AVVLST" ,<br />

"0G_AVVMDS" , "0G_AVVORB" , "0G_AVVRET" , "0G_AVVROY" , "0G_AVVSRB" , "0G_AVVVLB" , "0G_AVVVOT" , "0G_AVVVRM" , "0G_AVVWHG" , 0G_QABSMG" ,<br />

"0G_QVVTON" , "0G_QVVUOM" , "0SALES_CMSN" , "0SALES_MARK" , "1ROWCOUNT" , "ZCOGS" , "ZEXTREV" , "ZFRT_DED" , "ZGRMRGN" , "ZGRMRGN_F" ,<br />

"ZGR<strong>OS</strong>SSLS" , "ZG_AVVFTC" , "ZINTERDV" , "ZINTRADV" , "ZNETSALES" , "ZNETSLS_F" , "ZSLSDEDS" , "ZTOTDED_F" , "ZT_OTHDED" , "ZT_REBATE"<br />

FROM ( SELECT "<strong>DB2</strong>A0001"."SID" AS "S____065" , "/<strong>BI</strong>0/SCURRENCY"."SID" AS "S____028" ,"A0001"."SID" AS "S____097" , "A0002"."SID" AS "S____109"<br />

,"/<strong>BI</strong>0/SREFER_DOC"."SID" AS "S____179" , "/<strong>BI</strong>0/SREFER_ITM"."SID" AS "S____180" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."ADVERTISNG" ) AS "0ADVERTISNG" , SUM (<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_APRABA" ) AS "0G_APRABA" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_ASTDPR" ) AS "0G_ASTDPR" , SUM (<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVTRGK" ) AS "0G_AVTRGK" , SUM (“ /<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVCDA" ) AS "0G_AVVCDA" , SUM (<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVCDC" ) AS "0G_AVVCDC" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVCHG" ) AS "0G_AVVCHG" , SUM (<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVCTG" ) AS "0G_AVVCTG" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVDED" ) AS "0G_AVVDED" , SUM (<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVFGT" ) AS "0G_AVVFGT" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVFIX" ) AS "0G_AVVFIX" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVINV" )<br />

AS "0G_AVVINV" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVIWS" ) AS "0G_AVVIWS" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVLST" ) AS "0G_AVVLST" , SUM (<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVMDS" ) AS "0G_AVVMDS" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVORB" ) AS "0G_AVVORB" , SUM (<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVRET" ) AS "0G_AVVRET" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVROY" ) AS "0G_AVVROY" , SUM (<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVSRB" ) AS "0G_AVVSRB" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVVLB" ) AS "0G_AVVVLB" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVVOT"<br />

) AS "0G_AVVVOT" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVVRM" ) AS "0G_AVVVRM" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_AVVWHG" ) AS "0G_AVVWHG" , SUM (<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_QABSMG" ) AS "0G_QABSMG" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_QVVTON" ) AS "0G_QVVTON" , SUM (<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_QVVUOM" ) AS "0G_QVVUOM" , SUM ( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."SALES_CMSN" ) AS "0SALES_CMSN" , SUM (<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."SALES_MARK" ) AS "0SALES_MARK" , COUNT( * ) AS "1ROWCOUNT"<br />

FROM "/<strong>BI</strong>0/PDIVISION" ,"/<strong>BI</strong>0/SCO_AREA" ,"/<strong>BI</strong>0/SCURRENCY" ,"/<strong>BI</strong>0/SPROFIT_CTR" , "/<strong>BI</strong>0/SREFER_DOC" ,"/<strong>BI</strong>0/SREFER_ITM" ,"/<strong>BI</strong>0/SUNIT" "A0002" , "/<strong>BI</strong>0/SUNIT"<br />

"A0001" ,"/<strong>BI</strong>0/SUNIT" "<strong>DB2</strong>A0001" ,"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00" , "/<strong>BI</strong>C/XZMATLPLNT" ,"/<strong>BI</strong>C/XZRLNSP"<br />

WHERE "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."CURRENCY" = "/<strong>BI</strong>0/SCURRENCY"."CURRENCY" AND "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_UVVUOM" = "A0001"."UNIT" AND<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_UABSMG" = "A0002"."UNIT" AND "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."REFER_DOC" = "/<strong>BI</strong>0/SREFER_DOC"."REFER_DOC" AND<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."REFER_ITM" = "/<strong>BI</strong>0/SREFER_ITM"."REFER_ITM" AND "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."CO_AREA" = "/<strong>BI</strong>0/SCO_AREA"."CO_AREA" AND<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."PROFIT_CTR" = "/<strong>BI</strong>0/SPROFIT_CTR"."PROFIT_CTR" AND "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."CO_AREA" = "/<strong>BI</strong>0/SPROFIT_CTR"."CO_AREA" AND<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."/<strong>BI</strong>C/ZA_SADIV" = "/<strong>BI</strong>0/PDIVISION"."DIVISION" AND "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."/<strong>BI</strong>C/ZMATLPLNT" = "/<strong>BI</strong>C/XZMATLPLNT"."/<strong>BI</strong>C/ZMATLPLNT" AND<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."PLANT" = "/<strong>BI</strong>C/XZMATLPLNT"."PLANT" AND "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."/<strong>BI</strong>C/ZRLNSP" = "/<strong>BI</strong>C/XZRLNSP"."/<strong>BI</strong>C/ZRLNSP" AND<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."G_UVVTON" = "<strong>DB2</strong>A0001"."UNIT" AND "/<strong>BI</strong>0/PDIVISION"."OBJVERS" = 'A' AND "/<strong>BI</strong>C/XZMATLPLNT"."OBJVERS" = 'A' AND<br />

"/<strong>BI</strong>C/XZRLNSP"."OBJVERS" = 'A' AND (((( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."ACCNT_ASGN" = '00' OR "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."ACCNT_ASGN" = '01' OR<br />

"/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."ACCNT_ASGN" = '04' OR "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."ACCNT_ASGN" = '06' )) AND (( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."CALMONTH" BETWEEN '200311' AND<br />

'200404' )) AND (( "/<strong>BI</strong>0/SCO_AREA"."SID" = 3 )) AND (( "/<strong>BI</strong>C/AZ<strong>OS</strong>ASALE00"."CURTYPE" = 'B0' )) AND (( "/<strong>BI</strong>0/SPROFIT_CTR"."SID" = 31 )) AND ((<br />

"/<strong>BI</strong>0/PDIVISION"."/<strong>BI</strong>C/ZREPTDIV" = '5X' )) AND (( "/<strong>BI</strong>C/XZMATLPLNT"."S__ZMATLONLY" = 360013 )) AND (( "/<strong>BI</strong>C/XZRLNSP"."S__ZA_SASGRP" = 80 ))))<br />

GROUP BY "<strong>DB2</strong>A0001"."SID" ,"/<strong>BI</strong>0/SCURRENCY"."SID" ,"A0001"."SID" ,"A0002"."SID" , "/<strong>BI</strong>0/SREFER_DOC"."SID" , "/<strong>BI</strong>0/SREFER_ITM"."SID" ) "/<strong>BI</strong>0/0300411419"<br />

FOR FETCH ONLY WITH UR<br />

Figure 10-1 Example customer query against an ODS<br />

To break down a query, follow these steps:<br />

1. Build a join graph.<br />

204 <strong>Best</strong> <strong>Practices</strong> <strong>for</strong> <strong>SAP</strong> <strong>BI</strong> <strong>using</strong> <strong>DB2</strong> 9 <strong>for</strong> z/<strong>OS</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!