並行查詢允許將乙個sql select語句劃分為多個較小的查詢,每個部分的查詢併發地執行,然後會將各個部分的結果組合起來,提供最終的答案。
我們來看乙個例子:
1. 執行如下一串sql語句,建立乙個叫big_table的表,期間會讓你錄入1的值(想要往big_table表裡面插入多少行資料),我錄入的是1000萬行。
create table big_table
asselect rownum id, a.*
from all_objects a
where 1=0
/alter table big_table nologging;
declare
l_cnt number;
l_rows number := &1;
begin
into big_table
select rownum, a.*
from all_objects a;
l_cnt := sql%rowcount;
commit;
while (l_cnt < l_rows)
loop
select rownum+l_cnt,
owner, object_name, subobject_name,
object_id, data_object_id,
object_type, created, last_ddl_time,
timestamp, status, temporary,
generated, secondary
from big_table
where rownum <= l_rows-l_cnt;
l_cnt := l_cnt + sql%rowcount;
commit;
end loop;
end;
/alter table big_table add constraint
big_table_pk primary key(id)
/begin
dbms_stats.gather_table_stats
( ownname => user,
tabname => 'big_table',
method_opt => 'for all indexed columns',
cascade => true );
end;
/select count(*) from big_table;
2. 查詢
非並行執行態,select count(status) from big_table 所耗用時間。
explain plan for
select count(status) from big_table;
select * from table(dbms_xplan.display);
我電腦上的執行結果如下圖所示,耗用時間是6分半鐘。
3. 修改表允許並行執行,重新執行解析計畫
alter table big_table parallel;
explain plan for
select count(status) from big_table;
select * from table(dbms_xplan.display);
我電腦上的執行結果如下圖所示,耗時1分40。
如果自下而上地讀這個計畫(從id=6開始),它顯示了並行執行的具體步驟。全表掃瞄會分解為多個較小的掃瞄(第5步)。每個掃瞄彙總其count(status)值(第4步)。這些子結果將傳送給並行查詢協調器(第2步和第3步),它會進一步彙總這些結果(第1步),並輸出答案。
Oracle 並行查詢
所謂並行執行,是指能夠將乙個大型序列任務 任何dml,一般的ddl 物理的劃分為叫多個小的部分,這些較小的部分可以同時得到處理。何時使用並行執行 1 必須有乙個非常大的任務 2 必須有充足的資源 cpu,i o,memory alter table test a parallel 告訴oracel,...
Oracle的並行查詢嘗試
分析表,重新估算統計資訊 analyze table tasharecurrents estimate statistics 開啟或關閉表的並行選項 alter table tasharecurrents parallel alter table tasharecurrents noparallel...
ORACLE並行操作
並行處理一般都會涉及到訪問磁碟,如果資料不是分布在多個磁碟上,使用peo將會造成i o瓶頸。在很小的表或者非常快速的查詢中使用並行操作會降低效能。當並行度被設定成n,並行操作總共就需要 2 n 1個程序。建立表時,可以指定該錶可以使用的並行度dop degree of parallelism cre...