1、執行sql:select /*+ parallel(a,4) */ * from tf_f_user a where rownum<100000;
2、如何查看該sql語句的並行數量:
select t.sql_text,t.sql_id,s.sid from v$sql t,v$session s where t.sql_id=s.sql_id and t.sql_text like '%rownum<100000%';
執行上面sql語句發現是4條。
3、如果執行sql:select /*+ parallel(a,4) */ * from tf_f_user a where rownum<100000;
再查看sql語句的並行數量:
select t.sql_text,t.sql_id,s.sid from v$sql t,v$session s where t.sql_id=s.sql_id and t.sql_text like '%rownum<100000%';
執行上面的sql語句發現並行數量變為:40條,所以默認並行是40條(默認並行度=parallel_server_instances*cpu_count*parallel_threads_per_cpu,可以通過show parameter查詢相關的值)
4、如何開並行:
a、select語句直接加parallel關鍵字就行了,其他如update、delete、insert語句不僅要加關鍵字,還有很多限制:
1) 比如表必須是分區表,因為只有操作的數據是分區表時,oracle才會啟用並行操作,對於分區表,oracle會對每個分區啟用一個並行服務進程同時進行數據處理,這對於非分區的表來說是沒有意義的。
2) 必須執行命令:alter session enable parallel dml;
b、ddl語句也是直接加parallel關鍵字就行了。
注:
- 並行度的優先級從高到低為:
Hint -->Alter session Force Parallel -->表、索引上的設定(alter table t parallel 4、create index t on t(object_id) parallel 4) -->系統參數
2. 一條sql語句中啟用兩個並行,這兩個並行相互獨立,互不干涉