Query very slow. The issue is “ read by other session” due to union ALL

非 Y 不嫁゛ 提交于 2019-12-08 11:33:24

问题


I have below query. the below query has union all twice. Due to this ,query is waiting for the same resource and wait time is too high. Below is the output of sql trace.

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  SQL*Net message to client                       1        0.00          0.00
  Disk file operations I/O                     1047        0.00          0.15
  db file sequential read                    167048        0.64       1584.33
  db file parallel read                         216        0.05          1.37
  read by other session                      520944        0.71       5113.10
  latch: cache buffers chains                 31768        0.00          1.32
  db file scattered read                         50        0.01          0.14
  wait list latch free                            1        0.00          0.00

you can see read by other session parameter. is there anyway to make below query so that this time can be reduced?

 SELECT 
 mmt . transaction_date Txn_date ,  
   GCC.SEGMENT1||'
'||GCC.SEGMENT2||'
'||GCC.SEGMENT3||'
'||GCC.SEGMENT4||'
'||GCC.SEGMENT5||'
'||GCC.SEGMENT6 C_acct_flex1 , 
 MSI.SEGMENT1 C_item_flex1 , 
 msi . description Description , 
 mtt.transaction_type_name Type ,
 mmt . transaction_source_type_id Type_id , 
 mmt . organization_id Org_id , 
 DECODE ( mmt . transaction_source_type_id ,
           1 , to_char ( mmt . transaction_source_id ) ,
           2 ,  MKTS.SEGMENT1||''||MKTS.SEGMENT2||''||MKTS.SEGMENT3 ,
           3 ,  GL.SEGMENT1||''||GL.SEGMENT2||''||GL.SEGMENT3||''||GL.SEGMENT4||''||GL.SEGMENT5||''||GL.SEGMENT6 , 
           5 , to_char ( mmt . transaction_source_id ) , 
           6 ,  MDSP.SEGMENT1 , 
           7 , to_char ( mmt . transaction_source_id ) ,
           8 ,  MKTS.SEGMENT1||''||MKTS.SEGMENT2||''||MKTS.SEGMENT3 ,
           9 , to_char ( mmt . transaction_source_id ) , 
           10 , to_char ( mmt . transaction_source_id ) , 
           11 , to_char ( mmt . transaction_source_id ) ,
           12 ,  MKTS.SEGMENT1||''||MKTS.SEGMENT2||''||MKTS.SEGMENT3 , mmt . transaction_source_name ) 
Source , 
decode ( cal . accounted_dr ,
          NULL , - 1 * ABS ( mmt . primary_quantity ) , ABS ( mmt . primary_quantity ) ) Quantity , 
msi . primary_uom_code Primary_uom , 
round ( cal . rate_or_amount * : P_EXCHANGE_RATE , : cp_ext_precision ) Cost ,
 nvl ( nvl ( cal . accounted_dr , - 1 * cal . accounted_cr ) , 0 ) * : P_EXCHANGE_RATE Value , 
 cal . ae_line_id 

FROM 

cst_ae_headers cah ,
 mtl_material_transactions mmt  , 
 mtl_item_categories mic , 
 mtl_system_items msi ,
 MTL_SALES_ORDERS mkts ,
 MTL_GENERIC_DISPOSITIONS mdsp ,
 gl_code_combinations gl  ,
 mtl_transaction_types mtt ,
 cst_ae_lines cal , 
 gl_code_combinations gcc
 WHERE 
 cah . ae_header_id = cal . ae_header_id AND 
 cah . accounting_event_id = mmt . transaction_id AND 
 cah . acct_event_source_table = 'MMT' AND 
 cal . code_combination_id = gcc . code_combination_id AND 
 mmt . inventory_item_id = msi . inventory_item_id AND
 mmt . organization_id = msi . organization_id AND
 mmt . organization_id = nvl ( mmt . owning_organization_id , mmt . organization_id ) AND 
 nvl ( mmt . owning_tp_type , 2 ) = 2 AND 
 cah . cost_group_id = : P_cost_group_id AND
 cah . cost_type_id = : P_cost_type_id AND 
 cah . period_id = : P_period_id AND  
 GCC.SEGMENT1 = '0731' AND 
 GCC.SEGMENT2 BETWEEN '75000' AND '95999' AND 
 GCC.SEGMENT3 BETWEEN '00000' AND '99999' AND 
 GCC.SEGMENT4 BETWEEN '00000' AND '99999' AND 
 GCC.SEGMENT5 = '0000' AND 
 GCC.SEGMENT6 = '00000' AND  1 = 1 AND  1 = 1  AND
 mmt.transaction_type_id = mtt.transaction_type_id AND 
 mmt.inventory_item_id = mic.inventory_item_id AND 
 mmt.organization_id = mic.organization_id AND
 mic.category_set_id = 1    AND 
 ( mmt . transaction_source_type_id = : P_source_type_id OR : P_source_type_id IS NULL ) AND 
 ( mmt . transaction_type_id = : P_txn_type_id OR : P_txn_type_id IS NULL ) AND 
 mmt . transaction_source_id = mkts . sales_order_id (+) AND 
 mmt . transaction_source_id = mdsp . disposition_id (+) AND
 mmt . transaction_source_id = gl . code_combination_id (+)

 UNION ALL 

 SELECT 
 rt . transaction_date Txn_date , 
   GCC.SEGMENT1||'
'||GCC.SEGMENT2||'
'||GCC.SEGMENT3||'
'||GCC.SEGMENT4||'
'||GCC.SEGMENT5||'
'||GCC.SEGMENT6 C_acct_flex1 ,  
  MSI.SEGMENT1 C_item_flex1 ,
  msi . description Description , 
  rt.transaction_type Type ,
  0 Type_id ,
  0 Org_id ,
  null Source ,
  decode ( rt . po_distribution_id , 
          NULL , decode ( cal . accounted_dr , NULL , - 1 * ABS ( rt . primary_quantity ) , 
          ABS ( rt . primary_quantity ) ) * POD . QUANTITY_ORDERED / POLL . QUANTITY , decode ( cal . accounted_dr , NULL , - 1 * ABS ( rt . primary_quantity ) , ABS ( rt . primary_quantity ) ) ) Quantity , msi . primary_uom_code Primary_uom , round ( cal . rate_or_amount * : P_EXCHANGE_RATE , : cp_ext_precision ) Cost , nvl ( nvl ( cal . accounted_dr , - 1 * cal . accounted_cr ) , 0 ) * : P_EXCHANGE_RATE Value , cal . ae_line_id 

FROM

 cst_ae_headers cah , 
 cst_ae_lines cal ,
 mtl_system_items_vl msi , 
 rcv_transactions rt ,
 rcv_shipment_lines rsl , 
 gl_code_combinations gcc ,
 po_distributions_all pod , 
 po_line_locations_all poll  ,
 mtl_item_categories mic
 WHERE
 pod . line_location_id = poll . line_location_id and
 poll . line_location_id = rt . po_line_location_id and 
 pod . po_distribution_id = nvl ( rt . po_distribution_id , pod . po_distribution_id ) and
 pod . po_distribution_id = cal . po_distribution_id and 
 cah . ae_header_id = cal . ae_header_id AND 
 cah . accounting_event_id = rt . transaction_id AND
 cah . acct_event_source_table = 'RT' AND 
 cal . code_combination_id = gcc . code_combination_id AND
 rt . shipment_line_id = rsl . shipment_line_id AND
 NVL ( rt . consigned_flag , 'N' ) = 'N' AND 
 rsl . item_id = msi . inventory_item_id (+) AND 
 cah . organization_id = msi . organization_id AND 
 cah . cost_group_id = : P_cost_group_id AND 
 cah . cost_type_id = : P_cost_type_id AND 
 cah . period_id = : P_period_id AND
 GCC.SEGMENT1 = '0731' AND 
 GCC.SEGMENT2 BETWEEN '75000' AND '95999' AND 
 GCC.SEGMENT3 BETWEEN '00000' AND '99999' AND
 GCC.SEGMENT4 BETWEEN '00000' AND '99999' AND 
 GCC.SEGMENT5 = '0000' AND 
 GCC.SEGMENT6 = '00000' AND  1 = 1 AND  1 = 1 AND 
 rsl.item_id = mic.inventory_item_id
          AND cah.organization_id = mic.organization_id 
          AND mic.category_set_id  = 1    and 1 = 1 

UNION ALL 

SELECT rae . transaction_date Txn_date ,  GCC.SEGMENT1||'
'||GCC.SEGMENT2||'
'||GCC.SEGMENT3||'
'||GCC.SEGMENT4||'
'||GCC.SEGMENT5||'
'||GCC.SEGMENT6 C_acct_flex1 , 
 MSI.SEGMENT1 C_item_flex1 , 
 msi . description Description , 
 decode ( : P_type_option ,
          1 , rt . source_document_code , decode ( rae . event_type_id , 18 , raet . description , 19 , raet . description , 20 , raet . description , raet . event_type_name ) ) Type ,
          0 Type_id , 0 Org_id , null Source , decode ( cal . accounted_dr , NULL , - 1 * ABS ( rae . primary_quantity ) , ABS ( rae . primary_quantity ) ) Quantity , 
msi . primary_uom_code Primary_uom ,
round ( cal . rate_or_amount * : P_EXCHANGE_RATE , : cp_ext_precision ) Cost , 
nvl ( nvl ( cal . accounted_dr , - 1 * cal . accounted_cr ) , 0 ) * : P_EXCHANGE_RATE Value ,
 cal . ae_line_id 


 FROM 
 cst_ae_headers cah ,
 cst_ae_lines cal , 
 mtl_system_items msi ,
 rcv_transactions rt , 
 rcv_accounting_events rae ,
 rcv_shipment_lines rsl ,
 gl_code_combinations gcc , 
 rcv_Accounting_event_types raet  ,
 mtl_item_categories mic 

 WHERE 
 cah . ae_header_id = cal . ae_header_id AND 
 cah . accounting_event_id = rae . accounting_event_id and 
 rae . rcv_transaction_id = rt . transaction_id AND 
 cah . acct_event_source_table = 'RAE' AND
 cal . code_combination_id = gcc . code_combination_id AND 
 rt . shipment_line_id = rsl . shipment_line_id AND 
 NVL ( rt . consigned_flag , 'N' ) = 'N' AND 
 rsl . item_id = msi . inventory_item_id (+) AND 
 cah . organization_id = msi . organization_id AND 
 cah . cost_group_id = : P_cost_group_id AND 
 cah . cost_type_id = : P_cost_type_id AND
 cah . period_id = : P_period_id AND
 raet . event_type_id = rae . event_type_id AND  
 GCC.SEGMENT1 = '0731' AND
 GCC.SEGMENT2 BETWEEN '75000' AND '95999' 
 AND GCC.SEGMENT3 BETWEEN '00000' AND '99999' 
 AND GCC.SEGMENT4 BETWEEN '00000' AND '99999' 
 AND GCC.SEGMENT5 = '0000' 
 AND GCC.SEGMENT6 = '00000' AND  1 = 1 AND  1 = 1 
 AND rsl.item_id = mic.inventory_item_id
 AND cah.organization_id = mic.organization_id 
 AND mic.category_set_id  = 1   
 ORDER BY 2 asc , 1 asc , 3 asc , 5 asc , 7 asc , 8 asc , 9 asc , 11 asc 

Is there anyway to optimize the above query? even your small suggestion would be highly helpful

来源:https://stackoverflow.com/questions/57020943/query-very-slow-the-issue-is-read-by-other-session-due-to-union-all

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!