Oracle Parallel使用方法
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Oracle Parallel使用方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                轉自:https://blog.csdn.net/richieruan/article/details/50534886
一、 并行查詢
并行查詢允許將一個sql select語句劃分為多個較小的查詢,每個部分的查詢并發地運行,然后將各個部分的結果組合起來,提供最終的結果,多用于全表掃描,索引全掃描等,大表的掃描和連接、創建大的索引、分區索引掃描、大批量插入更新和刪除?
1. ? ?啟用并行查詢
SQL> ALTER TABLE T1 PARALLEL;
告知oracle,對T1啟用parallel查詢,但并行度要參照系統的資源負載狀況來確定。
利用hints提示,啟用并行,同時也可以告知明確的并行度,否則oracle自行決定啟用的并行度,這些提示只對該sql語句有效。
SQL> select /*+ parallel(t1 8) */ count(*)from t1;
?
SQL> select degree from user_tables where table_name='T1';
DEGREE
--------------------
? DEFAULT
?
并行度為Default,其值由下面2個參數決定
SQL> show parameter cpu
?
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TYPE ? ? ? VALUE
----------------------------------------------- ------------------------------
cpu_count ? ? ? ? ? ? ? ? ? ? ? ? ? integer ? ?2
parallel_threads_per_cpu ? ? ? ? ? ?integer ? ?2
?
cpu_count表示cpu數
parallel_threads_per_cpu表示每個cpu允許的并行進程數
default情況下,并行數為cpu_count*parallel_threads_per_cpu
?
2. ? ?取消并行設置
SQL> alter table t1 noparallel;
SQL> select degree from user_tables wheretable_name='T1';
?
DEGREE
----------------------------------------
? ? ? ? 1
?
3. ? ?數據字典視圖
v$px_session
sid:各個并行會話的sid
qcsid:query coordinator sid,查詢協調器sid
?
二、 并行dml
并行dml包括insert,update,delete,merge,在pdml期間,oracle可以使用多個并行執行服務器來執行insert,update,delete,merge,多個會話同時執行,同時每個會話(并發進程)都有自己的undo段,都是獨立的一個事務,這些事務要么由pdml協調器進程提交,要么都rollback。
在一個有充足I/o帶寬的多cpu主機中,對于大規模的dml,速度可能會有很大的提升,尤其是在大型的數據倉庫環境中。
并行dml需要顯示的啟用
SQL> alter session enable parallel dml;
?
Disable并行dml
SQL> alter session disable parallel dml;
?
三、 并行ddl
并行ddl提供了dba使用全部機器資源的能力,常用的pddl有
create table as select ……
create index
alter index rebuild
alter table move
alter table split
在這些sql語句后面加上parallel子句
例
SQL> alter table t1 move parallel;
Table altered
SQL> create index T1_IDX on T1 (OWNER,OBJECT_TYPE)
?2 ? tablespace SYSTEM
3 ? ? ? ?parallel;
4 ? ? ? ?;
1. ?用途
強行啟用并行度來執行當前SQL。這個在Oracle 9i之后的版本可以使用,之前的版本現在沒有環境進行測試。也就是說,加上這個說明,可以強行啟用Oracle的多線程處理功能。舉例的話,就像電腦裝了多核的CPU,但大多情況下都不會完全多核同時啟用(2核以上的比較明顯),使用parallel說明,就會多核同時工作,來提高效率。
但本身啟動這個功能,也是要消耗資源與性能的。所有,一般都會在返回記錄數大于100萬時使用,效果也會比較明顯。
2. ?語法
/*+parallel(table_short_name,cash_number)*/
這個可以加到insert、delete、update、select的后面來使用(和rule的用法差不多,有機會再分享rule的用法)
開啟parallel功能的語句是:
alter session enable parallel dml;
這個語句是DML語句哦,如果在程序中用,用execute的方法打開。
4. ?Parallel也可以用于多表
多表的話,就是在第一后面,加入其他的就可以了。具體寫法如下:
/*+parallel(t,10) (b,10)*/
5. ?小結
關于執行效率,建議還是多按照index的方法來提高效果。Oracle有自帶的explan road的方法,在執行之前,先看下執行計劃路線,對寫好的SQL tuned之后再執行。實在沒辦法了,再用parallel方法。Parallel比較邪惡,對開發者而言,不是好東西,會養成不好習慣,導致很多bad SQL不會暴漏,SQL Tuning的能力得不到提升。我有見過某些人create table后,從不create index或primary key,認為寫SQL時加parallel就可以了。
總結
以上是生活随笔為你收集整理的Oracle Parallel使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: linux卸载杀毒软件clama,cen
- 下一篇: 推荐10个免费的html,10个免费的H
