2014-04-25 108 views
0

有沒有使用Toad檢查或估計查詢進度的方法?我有一個查詢,最好運行20分鐘左右。當我調整查詢來嘗試使其更快時,它有時會以循環結束,並且永遠不會結束。有時可能需要一個小時。真正有用的是一些跡象表明查詢實際覆蓋了多少基礎,至少讓我知道什麼更快或什麼使它變慢。Oracle(TOAD)查詢進度

任何幫助將不勝感激。

我包括我的查詢只是櫃面有人可能會看到一些昭然若揭可能提高效率......

select * from 
(select menu_optn_name, tran_nbr, seq_nbr, cntr_nbr, ch.total_qty, ptt.create_date_time, 
um.user_name, ch.trlr_nbr, sum(ref_field_2) as Total from prod_trkg_tran ptt 
inner join user_master um 
on um.emplye_id = ptt.user_id 
left outer join carton_hdr ch 
on ch.carton_nbr = ptt.cntr_nbr 
where (menu_optn_name = 'RF Split/Comb {Carton}' and ptt.cntr_nbr = '0030651942') 
group by menu_optn_name, tran_nbr, seq_nbr, cntr_nbr, ch.total_qty, ptt.create_date_time, 
um.user_name, ch.trlr_nbr 
union 
select aptt.menu_optn_name, aptt.tran_nbr, aptt.seq_nbr, aptt.cntr_nbr, ach.total_qty, 
aptt.create_date_time, um.user_name, ach.trlr_nbr, sum(aptt.ref_field_2) 
as Total from [email protected]*******.com aptt 
inner join user_master um 
on um.emplye_id = aptt.user_id 
left outer join [email protected]*******.com ach 
on ach.carton_nbr = aptt.cntr_nbr 
where aptt.cntr_nbr not in 
(select aptt.cntr_nbr from [email protected]*******.com aptt 
where aptt.menu_optn_name = 'RF Split/Comb {Carton}' and aptt.cntr_nbr = '0030651942') 
and aptt.tran_nbr in 
(select aptt.tran_nbr from [email protected]*******.com aptt 
where aptt.menu_optn_name = 'RF Split/Comb {Carton}' and aptt.cntr_nbr = '0030651942') 
group by aptt.menu_optn_name, aptt.tran_nbr, aptt.seq_nbr, aptt.cntr_nbr, ach.total_qty, 
aptt.create_date_time, um.user_name, ach.trlr_nbr) 
where rownum <=2; 

7的

+0

只需嘗試蟾蜍中的會話瀏覽器(您需要特權並從DBA中獲取一個)。你會得到更多的信息。但閱讀更多關於他們使用文檔 – SriniV

回答

2

我會說使用Explain Plan選項(按Ctrl + E)。它會給你一個來自你的查詢影響的想法。

除此之外,確定查詢的持續時間非常困難。

+0

嗨@帕特里克謝謝,看起來很有趣。我不認爲你能給我一些關於我在解釋計劃中看到的東西的指針嗎? :) – LuckySevens

+0

嘗試閱讀本文http://use-the-index-luke.com/ – kayakpim

+0

使用和理解解釋計劃對於理解查詢的性能非常重要。查詢的效率取決於很多事情,但要開始通常高成本值是不好的。嘗試找到降低查詢成本的方法。您可以開始檢查您的查詢是使用您的索引還是多個全表掃描。許多全表掃描通常(但並非總是)是一件壞事,因此如果可能的話重寫查詢,如果不是,那麼添加一些索引以擺脫全表掃描可能是一個好主意。 – DJPeter

1

您想查看v $ session_longops表,例如http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2092.htm

或者,如果您有企業管理器進行調整和診斷,則會顯示長時間運行的查詢。否則,將查詢分成許多小部分並單獨運行。找出需要很長時間並重寫或編制索引的內容。也許把你的查詢放在這裏,我們可能會提出一些建議。如上所述,計劃可能有所幫助。

我強烈建議您設置可讀性的格式,例如:

select * from 
     (select menu_optn_name, 
       tran_nbr, 
       seq_nbr, 
       cntr_nbr, 
       ch.total_qty, 
       ptt.create_date_time, 
       um.user_name, 
       ch.trlr_nbr, 
       sum(ref_field_2) as Total 
     from prod_trkg_tran ptt 
     inner join user_master um on um.emplye_id = ptt.user_id 
     left outer join carton_hdr ch on ch.carton_nbr = ptt.cntr_nbr 
     where (menu_optn_name = 'RF Split/Comb {Carton}' 
     and ptt.cntr_nbr = '0030651942') 
     group by menu_optn_name, 
       tran_nbr, 
       seq_nbr, 
       cntr_nbr, 
       ch.total_qty, 
       ptt.create_date_time, 
       um.user_name, 
       ch.trlr_nbr 
     union 
     select aptt.menu_optn_name, 
       aptt.tran_nbr, 
       aptt.seq_nbr, 
       aptt.cntr_nbr, 
       ach.total_qty, 
       aptt.create_date_time, 
       um.user_name, 
       ach.trlr_nbr, 
       sum(aptt.ref_field_2) as Total 
     from [email protected]*******.com aptt 
     inner join user_master um on um.emplye_id = aptt.user_id 
     left outer join [email protected]*******.com ach on ach.carton_nbr = aptt.cntr_nbr 
     where aptt.cntr_nbr not in (select aptt.cntr_nbr 
            from [email protected]*******.com aptt 
            where aptt.menu_optn_name = 'RF Split/Comb {Carton}' 
            and aptt.cntr_nbr = '0030651942') 
     and aptt.tran_nbr in (select aptt.tran_nbr 
           from [email protected]*******.com aptt 
           where aptt.menu_optn_name = 'RF Split/Comb {Carton}' 
           and aptt.cntr_nbr = '0030651942') 
     group by aptt.menu_optn_name, 
       aptt.tran_nbr, 
       aptt.seq_nbr, 
       aptt.cntr_nbr, 
       ach.total_qty, 
       aptt.create_date_time, 
       um.user_name, 
       ach.trlr_nbr) 
where rownum <=2; 

您是否嘗試過單獨運行2個子選擇並查看它們需要多長時間以及每個聯合的一半。你真的只想要第一行(你可以嘗試添加第一行提示 - SELECT/* + FIRST_ROWS * /)?您只能通過查找緩慢運行的特定部分來調整內容!

+0

我會編輯問題以包含查詢。 – LuckySevens