Oracle並行模式(Parallel)

2021-08-25 05:31:44 字數 2386 閱讀 4101

1. 例項

(1)insert 加速

2. 用途

強行啟用並行度來執行當前sql。這個在oracle 9i之後的版本可以使用,之前的版本現在沒有環境進行測試。也就是說,加上這個說明,可以強行啟用oracle的多執行緒處理功能。舉例的話,就像電腦裝了多核的cpu,但大多情況下都不會完全多核同時啟用(2核以上的比較明顯),使用parallel說明,就會多核同時工作,來提高效率。

但本身啟動這個功能,也是要消耗資源與效能的。所有,一般都會在返回記錄數大於100萬時使用,效果也會比較明顯。

3. 語法

/*+parallel(table_short_name,cash_number)*/

這個可以加到insert、delete、update、select的後面來使用(和rule的用法差不多,有機會再分享rule的用法)

開啟parallel功能的語句是:

alter session enable parallel dml;

這個語句是dml語句哦,如果在程式中用,用execute的方法開啟。

4. 例項說明

用erp中的transaction來說明下吧。這個table記錄了所有的transaction,而且每天資料量也算相對比較大的(根據企業自身業務量而定)。假設我們現在要檢視對比去年一年當中每月的進、銷情況,所以,一般都會寫成:

select to_char(transaction_date,'yyyymm') txn_month,

sum(

decode(

sign(transaction_quantity),1,transaction_quantity,0

)) in_qty,

sum(

decode(

sign(transaction_quantity),-1,transaction_quantity,0

)) out_qty

from mtl_material_transactions mmt

where transaction_date >= add_months(

to_date(    

to_char(sysdate,'yyyy')||'0101','yyyymmdd'),

-12)

and transaction_date <= add_months(

to_date(

to_char(sysdate,'yyyy')||'1231','yyyymmdd'),

-12)

group by to_char(transaction_date,'yyyymm') 

這個sql執行起來,如果transaction_date上面有加index的話,效率還算過的去;但如果沒有加index的話,估計就會半個小時內都執行不出來。這是就可以在select 後面加上parallel說明。例如:

select /*+parallel(mmt,10)*/

to_char(transaction_date,'yyyymm') txn_month,

...這樣的話,會大大提高執行效率。如果要將檢索出來的結果insert到另乙個表tmp_count_tab的話,也可以寫成:

insert /*+parallel(t,10)*/

into tmp_count_tab

(txn_month,

in_qty,

out_qty

)select /*+parallel(mmt,10)*/

to_char(transaction_date,'yyyymm') txn_month,

...插入的機制和檢索機制差不多,所以,在insert後面加parallel也會加速的。關於insert機制,這裡暫不說了。

parallel後面的數字,越大,執行效率越高。不過,貌似跟server的配置還有oracle的配置有關,增大到一定值,效果就不明顯了。所以,一般用8,10,12,16的比較常見。我試過用30,發現和16的效果一樣。不過,數值越大,占用的資源也會相對增大的。如果是在一些package、function or procedure中寫的話,還是不要寫那麼大,免得占用太多資源被dba開k。

5. parallel也可以用於多表

多表的話,就是在第一後面,加入其他的就可以了。具體寫法如下:

/*+parallel(t,10) (b,10)*/

6. 小結

關於執行效率,建議還是多按照index的方法來提高效果。oracle有自帶的explan road的方法,在執行之前,先看下執行計畫路線,對寫好的sql tuned之後再執行。實在沒辦法了,再用parallel方法。parallel比較**,對開發者而言,不是好東西,會養成不好習慣,導致很多bad sql不會暴漏,sql tuning的能力得不到提公升。我有見過某些人create table後,從不create index或primary key,認為寫sql時加parallel就可以了。

Oracle並行模式(Parallel)

1.例項 1 insert 加速 2.用途 強行啟用並行度來執行當前sql。這個在oracle 9i之後的版本可以使用,之前的版本現在沒有環境進行測試。也就是說,加上這個說明,可以強行啟用oracle的多執行緒處理功能。舉例的話,就像電腦裝了多核的cpu,但大多情況下都不會完全多核同時啟用 2核以上...

oracle並行模式(Parallel)

1 用途 強行啟用並行度來執行當前sql。這個在oracle 9i之後的版本可以使用,之前的版本現在沒有環境進行測試。也就是說,加上這個說明,可以強行啟用oracle的多執行緒處理功能。舉例的話,就像電腦裝了多核的cpu,但大多情況下都不會完全多核同時啟用 2核以上的比較明顯 使用parallel說...

Oracle 並行查詢

並行查詢允許將乙個sql select語句劃分為多個較小的查詢,每個部分的查詢併發地執行,然後會將各個部分的結果組合起來,提供最終的答案。我們來看乙個例子 1.執行如下一串sql語句,建立乙個叫big table的表,期間會讓你錄入1的值 想要往big table表裡面插入多少行資料 我錄入的是10...