If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

 
Go Back  dBforums > Database Server Software > DB2 > Query Performance Issue

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1 (permalink)  
Old 05-01-09, 13:10
db2itg db2itg is offline
Registered User
 
Join Date: May 2008
Posts: 15
Post Query Performance Issue

Our one online transaction has started taking so much time for last couple of days. What is interesting is this started tanking on 4/29, but nothing was changed since 4/17. As there is just 1 SQL statement in the package, the only other thing I can think of is the :HV being passed in may cause a long scan.

Something has gone awfully wrong in the past 2 days. The CPU and Elapsed time have drastically increased. DBA attempted a rebind to go to a new access path, but it didn’t change the outcome. This one query took close to 90 minutes of cpu time.

Could anyone please suggesst any changes in query to make it efficient?

Appreciate your help.
Reply With Quote
  #2 (permalink)  
Old 05-01-09, 13:14
db2itg db2itg is offline
Registered User
 
Join Date: May 2008
Posts: 15
Post query..

Code:
SELECT  TABA.SRVDLS_IDN
                 ,TABA.FLAG_CODE
                 ,INDTYP.IND_TYPE_DESC
              FROM (SELECT SRVDLS.IDN SRVDLS_IDN
                           , 'SLR' FLAG_CODE
                      FROM SERV_DLVRY_SITE SRVDLS
                     WHERE SRVDLS.IDN = :KEYSET-SRVDLS-IDN
                       AND SRVDLS.LOC_EXPLAN_TEXT IS NOT NULL

                   UNION
                        
                    SELECT SRVDLS2.IDN SRVDLS_IDN
                          , 'LSP' FLAG_CODE
                      FROM SERV_DLVRY_SITE SRVDLS1
                          ,SERV_DLVRY_SITE SRVDLS2
                     WHERE SRVDLS2.IDN = :KEYSET-SRVDLS-IDN
                       AND SRVDLS2.SRVDLS_IDN = SRVDLS1.IDN
                       AND SRVDLS1.CNCR_CUSTMR_IDN IS NOT NULL

                   UNION

                    SELECT SERV.SRVDLS_IDN
                          , 'BRS' FLAG_CODE
                      FROM SERVICE SERV
                          ,READING_COND RDGCND
                          ,INSTALLED_REGISTER INSREG
                          ,METER_INSTALLATION MTRINL
                     WHERE SERV.SRVDLS_IDN = :KEYSET-SRVDLS-IDN
                       AND SERV.IDN = RDGCND.SERV_IDN
                       AND SERV.IDN = INSREG.SERV_IDN
                       AND INSREG.MTRINL_IDN = MTRINL.IDN
                       AND INSREG.LAST_EFF_DATE IS NULL
                       AND MTRINL.LAST_EFF_DATE IS NULL
                       AND RDGCND.READING_COND_DATE >=
                           CURRENT DATE - 45 DAYS
                       AND RDGCND.READING_COND_CODE
                                 IN ('004', '005', '010')

                   UNION
                                                                           
                    SELECT FWREQ.SRVDLS_IDN
                          , 'PWR' FLAG_CODE
                      FROM FIELD_WORK_REQUEST FWREQ
                     WHERE FWREQ.SRVDLS_IDN = :KEYSET-SRVDLS-IDN
                       AND REQ_STATUS_CODE IN ('OPN', 'REQ')

                   UNION

                    SELECT FWREQ.SRVDLS_IDN
                          ,'REC' AS FLAG_CODE
                      FROM FIELD_WORK_REQUEST FWREQ
                     WHERE FWREQ.SRVDLS_IDN = :KEYSET-SRVDLS-IDN
                       AND FWREQ.COMPL_DATE IS NULL
                       AND REQ_STATUS_CODE = 'OPN'
                       AND WORK_REQ_TYPE_CODE = '094'

                   UNION                                                   

                    SELECT FWREQ.SRVDLS_IDN                                
                          ,'RCO' AS FLAG_CODE                              
                      FROM FIELD_WORK_REQUEST FWREQ                        
                     WHERE FWREQ.SRVDLS_IDN = :KEYSET-SRVDLS-IDN           
                       AND FWREQ.COMPL_DATE >=                             
                                 CURRENT DATE - 1 DAY                      
                       AND REQ_STATUS_CODE = 'CLO'                         
                       AND WORK_REQ_TYPE_CODE = '094'                      
                       AND WORK_STATUS_CODE = 'CMPL'                       
                                                                           
                   UNION                                                   
                                                                           
                    SELECT FWREQ.SRVDLS_IDN                                
                          ,'SDI' AS FLAG_CODE                              
                      FROM FIELD_WORK_REQUEST FWREQ                        
                     WHERE FWREQ.SRVDLS_IDN = :KEYSET-SRVDLS-IDN           
                       AND FWREQ.COMPL_DATE >=                             
                                 CURRENT DATE - 1 DAY                      
                       AND REQ_STATUS_CODE = 'CLO'                         
                       AND WORK_REQ_TYPE_CODE = '094'                      
                       AND (WORK_STATUS_CODE IS NULL                       
                        OR WORK_STATUS_CODE = ' ')                         
                                                                           
                   UNION                                                   
                                                                           
                    SELECT FWREQ.SRVDLS_IDN                                
                          ,'RER' AS FLAG_CODE                              
                      FROM FIELD_WORK_REQUEST FWREQ                        
                     WHERE FWREQ.SRVDLS_IDN = :KEYSET-SRVDLS-IDN           
                       AND REQ_STATUS_CODE NOT IN ('CAN', 'CLO')           
                       AND WORK_REQ_TYPE_CODE IN                           
                          ('096', '101', '102')                            
                                                                           
                   UNION                                                   
                                                                           
                    SELECT SERV.SRVDLS_IDN                                 
                          , 'UIM' FLAG_CODE                                
                      FROM SERVICE SERV                                    
                     WHERE SERV.SRVDLS_IDN = :KEYSET-SRVDLS-IDN            
                       AND SERV.INACT_MTR_USG_IND = 'Y'                    
                       AND SERV.STAT_CODE = 'INA'                          
                   UNION                                                   
                                                                           
                    SELECT SITIND.SRVDLS_IDN                               
                          , 'ENP' FLAG_CODE                                
                      FROM SITE_INDICATOR SITIND                           
                     WHERE SITIND.SRVDLS_IDN = :KEYSET-SRVDLS-IDN          
                       AND SITIND.IND_TYPE_CODE = 'EP'                     
                                                                           
                   UNION
...continue
Reply With Quote
  #3 (permalink)  
Old 05-01-09, 13:15
db2itg db2itg is offline
Registered User
 
Join Date: May 2008
Posts: 15
query continue...

Code:
 query continue...
                   
                            SELECT SERV.SRVDLS_IDN
                          ,CASE WHEN MTRINL.EMR_RDG_MTHD_CODE = 'A'
                                THEN 'AMR'                                 
                                WHEN MTRINL.EMR_RDG_MTHD_CODE = 'S'
                                THEN 'AMS'                                 
                                WHEN MTRINL.EMR_RDG_MTHD_CODE = 'E'
                                THEN 'ADP'                                 
                                WHEN MTRINL.EMR_RDG_MTHD_CODE = 'M'
                                THEN 'MAN'                                 
                                WHEN MTRINL.EMR_RDG_MTHD_CODE = 'R'
                                THEN 'AMX'
                            END AS FLAG_CODE
                      FROM SERVICE SERV
                          ,INSTALLED_REGISTER INSREG
                          ,METER_INSTALLATION MTRINL
                     WHERE SERV.SRVDLS_IDN = :KEYSET-SRVDLS-IDN
                       AND INSREG.MTRINL_IDN = MTRINL.IDN
                       AND SERV.IDN = INSREG.SERV_IDN
                      AND
                       VALUE(MTRINL.LAST_EFF_DATE,DATE('9999-12-31'))
                           >= CURRENT DATE 
                       AND 
                       VALUE(INSREG.LAST_EFF_DATE,DATE('9999-12-31')) 
                           >= CURRENT DATE
                       AND MTRINL.EMR_RDG_MTHD_CODE IN
                           ('A', 'S', 'E', 'M','R')
              UNION 

                    SELECT SERV.SRVDLS_IDN
                          ,'ITR' FLAG_CODE
                      FROM SERVICE SERV
                          ,INSTALLED_REGISTER INSREG
                          ,METER_INSTALLATION MTRINL
                     WHERE SERV.SRVDLS_IDN = :KEYSET-SRVDLS-IDN
                       AND INSREG.MTRINL_IDN = MTRINL.IDN
                       AND SERV.IDN = INSREG.SERV_IDN
                      AND
                       VALUE(MTRINL.LAST_EFF_DATE,DATE('9999-12-31'))
                           >= CURRENT DATE 
                       AND
                       VALUE(INSREG.LAST_EFF_DATE,DATE('9999-12-31'))
                           >= CURRENT DATE
                       AND MTRINL.EMR_RDG_MTHD_CODE = 'I'
                       AND MTRINL.COMMUN_TYPE_CODE = ' '
 
                   UNION

                    SELECT SERV.SRVDLS_IDN                                 
                          , 'TOU' FLAG_CODE
                      FROM SERVICE SERV
                          ,INSTALLED_REGISTER INSREG
                          ,METER_INSTALLATION MTRINL
                     WHERE SERV.SRVDLS_IDN = :KEYSET-SRVDLS-IDN
                       AND INSREG.MTRINL_IDN = MTRINL.IDN
                       AND SERV.IDN = INSREG.SERV_IDN 
                       AND 
                       VALUE(MTRINL.LAST_EFF_DATE,DATE('9999-12-31')) 
                           >= CURRENT DATE
                       AND
                       VALUE(INSREG.LAST_EFF_DATE,DATE('9999-12-31'))
                           >= CURRENT DATE
                       AND MTRINL.METER_CONFIG_CODE IN ('TOU', 'DTU')

                   UNION
                    SELECT SERV.SRVDLS_IDN
                          , 'OMR' FLAG_CODE
                      FROM SERVICE SERV
                          ,INSTALLED_REGISTER INSREG
                          ,METER_INSTALLATION MTRINL
                          ,METER_ROUTE MTRRTE
                     WHERE SERV.SRVDLS_IDN = :KEYSET-SRVDLS-IDN
                       AND INSREG.MTRINL_IDN = MTRINL.IDN
                       AND SERV.IDN = INSREG.SERV_IDN
                       AND
                       VALUE(MTRINL.LAST_EFF_DATE,DATE('9999-12-31'))
                           >= CURRENT DATE
                       AND
                       VALUE(INSREG.LAST_EFF_DATE,DATE('9999-12-31'))
                           >= CURRENT DATE
                       AND MTRINL.EMR_RDG_MTHD_CODE = 'I'
                       AND MTRINL.COMMUN_TYPE_CODE = 'O'
                       AND SERV.MTRRTE_IDN = MTRRTE.IDN 
                       AND MTRRTE.MOBILE_READ_IND ^= 'Y'

                   UNION

                    SELECT SERV.SRVDLS_IDN
                          , 'MMR' FLAG_CODE
                      FROM SERVICE SERV
                          ,INSTALLED_REGISTER INSREG
                          ,METER_INSTALLATION MTRIN
                          ,METER_ROUTE MTRRTE 
                     WHERE SERV.SRVDLS_IDN = :KEYSET-SRVDLS-IDN            
                       AND INSREG.MTRINL_IDN = MTRINL.IDN                  
                       AND SERV.IDN = INSREG.SERV_IDN                      
                       AND                                                 
                       VALUE(MTRINL.LAST_EFF_DATE,DATE('9999-12-31'))      
                           >= CURRENT DATE                                 
                       AND 
                       VALUE(INSREG.LAST_EFF_DATE,DATE('9999-12-31'))      
                           >= CURRENT DATE
                       AND SERV.MTRRTE_IDN = MTRRTE.IDN 
                       AND MTRRTE.MOBILE_READ_IND = 'Y' 

                                                                           
                   UNION

                     SELECT DISTINCT INSREG.SRVDLS_IDN
                          , CASE
                             WHEN MTRINL.RMT_CAPABLE_NM = 'CONNECT'
                             THEN 'RCC'
                             WHEN MTRINL.RMT_CAPABLE_NM = 'READ'
                             THEN 'RRC'
                            END AS FLAG_CODE
                     FROM INSTALLED_REGISTER INSREG
                         ,METER_INSTALLATION MTRINL
                     WHERE INSREG.SRVDLS_IDN =
                          :KEYSET-SRVDLS-IDN
                     AND   INSREG.MTRINL_IDN =
                           MTRINL.IDN
                     AND   VALUE(MTRINL.LAST_EFF_DATE,
                             DATE('9999-12-31')) >= CURRENT DATE
                     AND   VALUE(INSREG.LAST_EFF_DATE,
                             DATE('9999-12-31')) >= CURRENT DATE
                     AND   MTRINL.RMT_CAPABLE_NM IN
                             ('READ','CONNECT')

                   UNION

                    SELECT SITIND.SRVDLS_IDN
                          , SITIND.IND_TYPE_CODE AS FLAG_CODE
                      FROM SITE_INDICATOR SITIND
                     WHERE SITIND.SRVDLS_IDN = :KEYSET-SRVDLS-IDN
                       AND SITIND.IND_TYPE_CODE NOT IN ('EP', 'HPP')

                   UNION

                    SELECT Q1.SRVDLS_IDN, Q1.FLAG_CODE FROM (
                      SELECT VALUE(Q2.SRVDLS_IDN, Q3.SRVDLS_IDN)
                      AS SRVDLS_IDN, VALUE(Q2.FLAG, Q3.FLAG)
                      AS FLAG_CODE FROM (
                        (SELECT 'AMI' AS FLAG, SRVDLS.IDN AS SRVDLS_IDN
                           FROM SERV_DLVRY_SITE SRVDLS
                         WHERE SRVDLS.IDN = :KEYSET-SRVDLS-IDN
                           AND EXISTS (
                           SELECT 1 FROM TCBIS_TRF_XREF T
                             , SERVICE S, METER M
                            WHERE T.SRVDLS_IDN = S.SRVDLS_IDN
                              AND S.SRVDLS_IDN = :KEYSET-SRVDLS-IDN
                              AND S.STAT_CODE NOT IN
                                  ('CAN','REQ','RMV','RMW')
                              AND T.SERV_IDN = S.IDN
                              AND T.CIRCUIT_NUM IN 
                                  (SELECT CIRCUIT_NUM FROM
                                   UOF_CIRCUIT_PILOT)
                              AND S.METER_IDN = M.IDN
                              AND M.FEATURE_CODE IN 
                                  ('L','X','Y') ) ) AS Q2
                      FULL OUTER JOIN
                      (SELECT 'AMA' AS FLAG, SRVDLS.IDN AS SRVDLS_IDN 
                      FROM SERV_DLVRY_SITE SRVDLS
                      WHERE SRVDLS.IDN = :KEYSET-SRVDLS-IDN
                        AND EXISTS (
                           SELECT 1 FROM TCBIS_TRF_XREF T
                             , SERVICE S, METER M
                            WHERE T.SRVDLS_IDN = S.SRVDLS_IDN
                              AND S.SRVDLS_IDN = :KEYSET-SRVDLS-IDN
                              AND S.STAT_CODE NOT IN
                                  ('CAN','REQ','RMV','RMW')
                              AND T.SERV_IDN = S.IDN
                              AND T.CIRCUIT_NUM IN
                                  (SELECT CIRCUIT_NUM FROM
                                   UOF_CIRCUIT_PILOT)
                              AND S.METER_IDN = M.IDN 
                              AND M.FEATURE_CODE NOT IN 
                                  ('L','X','Y') ) ) AS Q3
                      ON Q2.SRVDLS_IDN = Q3.SRVDLS_IDN ) ) AS Q1

                       ) AS TABA

              LEFT OUTER JOIN INDICATOR_TYPE INDTYP
               ON  TABA.FLAG_CODE = INDTYP.IND_TYPE_CODE
              QUERYNO 1
           END-EXEC.
Reply With Quote
  #4 (permalink)  
Old 05-01-09, 14:02
rdutton rdutton is offline
Registered User
 
Join Date: Dec 2008
Posts: 76
You give no version or platform, but even if we had these we could not evaluate such a long complex statement properly. It will be dependant on the structure of the tables, the data, and a dozen other factors.

Get an explain of the statement to pinpoint problem areas. Perhaps it needs indexes, stats, a reorg, etc.. Maybe some parts can be rewritten more efficiently.
Reply With Quote
  #5 (permalink)  
Old 05-01-09, 16:07
Peter.Vanroose Peter.Vanroose is offline
Registered User
 
Join Date: Sep 2004
Location: Belgium
Posts: 1,079
Just two suggestions, from a quick first investigation of the query:

- try to replace all "UNION"s by "UNION ALL"s
- the FULL OUTER JOIN: could it be reformulated into an INNER JOIN in this case?

If you post your PLAN_TABLE after running Explain, maybe some more useful suggestions could be given.
__________________
--_Peter Vanroose,
__IBM Certified Database Administrator, DB2 9 for z/OS
__IBM Certified Application Developer
__ABIS Training and Consulting
__http://www.abis.be/
Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On