Oracle 並行查詢

2021-09-01 14:11:17 字數 1885 閱讀 1182

並行查詢允許將乙個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...