對hint的調優

2021-09-22 18:59:39 字數 3146 閱讀 1323

實際工作中經常遇到開發人員加hint為提高資料的批處理的速度,但為了提高處理速度經常遇到並行的hint隨意使用,並行不是萬能的,不合理的使用只能阻礙執行速度,使用如下sql說明並行問題

select  /*+ leading(t1) use_hash(t_lgin) parallel(t1,8) */

t1.rpo_no

,t_lgin.lgin_dt

,t_lgin.user_id 

,t_lgin.user_ip

,t_lgin.clnt_ip 

,t_lgin.mac_addr

,t_lgin.menu_sys_cd

,row_number() over(partition by t1.rpo_no order by t_lgin.lgin_dt desc) rnk

from    mcs_hq_read.up_rpo_trace_0602 t1

,mcs_hq.hi_user_lgin t_lgin

where   t_lgin.user_id = t1.req_id

and     t_lgin.lgin_dt >= trunc(t1.req_dt)

and     t_lgin.lgin_dt <= t1.req_dt

order by t1.rpo_no

他的執行計畫如下

select statement, goal = hint: all_rows   110412 306398 30027004  

px coordinator       

px send qc (order) sys :tq10003 110412 306398 30027004  

window sort   110412 306398 30027004  

px receive   110412 306398 30027004  

px send range sys :tq10002 110412 306398 30027004  

hash join   110412 306398 30027004 "t_lgin"."lgin_dt">=trunc(internal_function("t1"."req_dt")) and "t_lgin"."lgin_dt"<="t1"."req_dt" 

px receive   506 396167 20996851  

px send hash sys :tq10001 506 396167 20996851  

px block iterator   506 396167 20996851  

table access full mcs_hq_read up_rpo_trace_0602 506 396167 20996851  

buffer sort       

px receive   109819 35155980 1582019100  

px send hash sys :tq10000 109819 35155980 1582019100  

table access full mcs_hq hi_user_lgin 109819 35155980 1582019100 

說明連個表在做hash連線時,驅動表是被讀到記憶體的,對驅動表再作並行,意義不大,並且並行也是消耗資源的,所以這條sql在hint的指導下執行了1分56秒,那麼如果對大表做並**況又會怎樣呢

select  /*+ leading(t1) use_hash(t_lgin) parallel(t_lgin,8) */

t1.rpo_no

,t_lgin.lgin_dt

,t_lgin.user_id 

,t_lgin.user_ip

,t_lgin.clnt_ip 

,t_lgin.mac_addr

,t_lgin.menu_sys_cd

,row_number() over(partition by t1.rpo_no order by t_lgin.lgin_dt desc) rnk

from    mcs_hq_read.up_rpo_trace_0602 t1

,mcs_hq.hi_user_lgin t_lgin

where   t_lgin.user_id = t1.req_id

and     t_lgin.lgin_dt >= trunc(t1.req_dt)

and     t_lgin.lgin_dt <= t1.req_dt

order by t1.rpo_no

檢視執行計畫

select statement, goal = hint: all_rows   18966 306398 30027004  

px coordinator       

px send qc (order) sys :tq10002 18966 306398 30027004  

window sort   18966 306398 30027004  

px receive   18966 306398 30027004  

px send range sys :tq10001 18966 306398 30027004  

hash join   18966 306398 30027004 "t_lgin"."lgin_dt">=trunc(internal_function("t1"."req_dt")) and "t_lgin"."lgin_dt"<="t1"."req_dt" 

buffer sort       

px receive   3653 396167 20996851  

px send broadcast sys :tq10000 3653 396167 20996851  

table access full mcs_hq_read up_rpo_trace_0602 3653 396167 20996851  

px block iterator   15227 35155980 1582019100  

table access full mcs_hq hi_user_lgin 15227 35155980 1582019100  

這時看到總成本18966比之前的總成本110412 小了近6倍,這說明對資料量大的表且經常從磁碟讀資料的表做並行是很有益處的。這條sql的執行時間是45秒,因此對不同物件使用並行還是有分別的。

oracle調優HINT提示

提示 hint 從oracle7 中引入,目的是彌補基於成本優化器的缺陷。提示通常用來改變 sql執行計畫,提高執行效率。1.使用提示需要遵循的原則 1 仔細檢查提示語法。盡量使用完整注釋語法 hint 2 使用表別名。如果在查詢中指定了表別名,那麼提示必須也使用表別名。例如 select inde...

JVM調優 對eclipse啟動調優紀實(2)

heap def new generation total 157248k,used 19646k 0x04b00000,0x0f5a0000,0x0f5a0000 eden space 139776k,9 used 0x04b00000,0x05788208,0x0d380000 from spa...

對mapReduce效能調優的總結

mapreduce效能調優的著手點有如下幾個 1 map輸出的壓縮 2 reducetask數量的設定 3 shuffle資料處理過程中的一些引數 分別如下 一 map的輸出壓縮 設定方法有兩種 1 通過configuration.set name,value 設定 2 通過配置檔案mapred s...