2016-05-31 72 views
-1

我有一個將表連接到某些數據字典視圖的查詢。查詢有時可以正常工作,但有時執行時間太長。當它這樣做時,即使我再次取消並運行100次,它也不會響應。Oracle查詢的性能變化

查詢是:

SELECT 
     /*+ PARALLEL(auto) */ 
    t.id 
    FROM table1 t , 
     (SELECT  /*+ PARALLEL(auto) */ DISTINCT r.INDEX_VALUE AS id, 
      r.LOCAL_ROWID, 
      r.REMOTE_ROWID 
     FROM DBA_COMPARISON_COLUMNS c, 
      DBA_COMPARISON_ROW_DIF r, 
      DBA_COMPARISON_SCAN s 
     WHERE R.SCAN_ID  = S.SCAN_ID 
     AND c.COMPARISON_NAME = 'CMP_name' 
     AND s.root_SCAN_ID = '{scan_id}' 
     AND r.STATUS   = 'DIF' 
     ) dif 
     WHERE t.id = dif.id; 

誰能幫我解決這個問題?

+5

這是不可能回答這樣的問題。請分享查詢以及在查詢無效時收到的錯誤。 – Mureinik

+0

爲什麼這個問題upvoted兩次?這個問題甚至沒有代碼可以查看。 –

+0

查詢沒有錯誤,當我運行它時需要太長的時間,所以我取消它。 –

回答

1

可以有,爲什麼你的查詢會繼續運行,這取決於(但不限於)數據庫100個理由,其他表寫上表中的數據相同的表,鎖等

你應該拳頭檢查V $ SESSION_LONGOPS查看該查詢是否存在以及其他一些細節。

我一般使用下面的故障排除。你可以檢查你的查詢是否存在。如果是的話,找到sid並原路返回的意見,以檢查鎖等

select sesion.sid,sql_text 
from v$sqltext sqltext, v$session sesion 
where sesion.sql_hash_value = sqltext.hash_value 
and sesion.sql_address = sqltext.address 
and sesion.username is not null 
order by sqltext.piece; 
1

您的查詢是基於該意見從顯示輸出DBMS_COMPARISON。所以結果集的大小將根據比較生成的增量而變化。如果存在大量漂移,則三角洲可能非常大,因爲您在查詢行差異。

另一個潛在問題:您的查詢不會將DBA_COMPARISON_COLUMNS加入到其他表中。可能你應該在加入標準中包括COMPARISON_NAME,像這樣...

FROM DBA_COMPARISON_COLUMNS c, 
     DBA_COMPARISON_ROW_DIF r, 
     DBA_COMPARISON_SCAN s 
    WHERE c.COMPARISON_NAME = 'CMP_name' 
    AND r.COMPARISON_NAME = c.COMPARISON_NAME 
    AND s.COMPARISON_NAME = c.COMPARISON_NAME 
    AND R.SCAN_ID  = S.SCAN_ID 
    AND s.root_SCAN_ID = '{scan_id}' 
    AND r.STATUS   = 'DIF'