2014年6月30日 星期一

Oracle DML Parallel



通常再執行 SQL 時, 都是單線單進程在處理 ,  Parallel 就是 Oracle 利用多線多進程對SQL分別做執行處理, 最後再結合最後的結果 ,使用了Parallel後都能大幅度的提高執行速度。


目前Oracle 提供 Parallel  的操作類型如下:

1.查詢
2.DDL
3.DML

 Parallel 最好使用於系統有足夠的資源時,不然可能就會影響到DB內其他用戶的效能

Hint 語法為  /*+ parallel (table_name , cash_number) */

Update 範例

code

update /*+ parallel (test_dml_parallel,4) */ test_dml_parallel set object_id='20';













執行時間:116 secs

看到執行計畫發現Update 並沒有Parallel,Oracle只有在搜尋並行。

這時執行
SQL> ALTER SESSION ENABLE  PARALLEL DML;


code

update /*+ parallel (test_dml_parallel,4) */ test_dml_parallel set object_id='20';















執行時間:56 secs

執行 ALTER SESSION ENABLE  PARALLEL DML 後 ,Update真正使用Parallel,如果不執行此語法,也只是Select Parallel 而已。


Insert 示範

執行
SQL> ALTER SESSION ENABLE  PARALLEL DML;

code

  insert /*+ parallel (test_dml_parallel,4) */ into test_dml_parallel select * from test_dml_parallel ;














通過 Insert 的執行計畫看到,Insert 的 Parallel 是透過 /*+APPEND*/  插入,假如以一般常規方式插入還需加上 /*+NOAPPEND*/


啟用 session 並行
ALTER SESSION ENABLE PARALLEL DML;
關閉 session 並行
ALTER SESSION DISABLE PARALLEL DML;