並發parallel和append
/*+append*/ 注意事項
1.在非歸檔模式中 nologing和 logging 都不會產生大量的redo日志,但是在歸檔模式中如果是logging 表會產生大量的redo日志 但是nologging表就不會產生.
(建議在歸檔模式中大量插入數據的時候先把表改成nologging模式'ALTER TABLE table_name NOLOGGING' 然后 等數據插入完事在'ALTER TABLE table_name LOGGING')
2.append 增加數據的時候 不會檢查HWM中是否有空閑塊,會直接往HWM之上一個新塊當中插入數據,所以一定要批量插入,要不然每一條數據就會增加一個新塊 十分浪費空間.
測試環境11g
300萬數據
insert /*+append*/ into 8秒;
insert into 190秒;
效率確實提高很多.
parallel dml (pdml)注意事項
1.pdml 必須顯示的打開和關閉否則不生效(加上hint注釋的時候執行計划的顯示是一樣的但是並沒有並發dml)
ALTER SESSION ENABLE PARALLEL DML;
ALTER SESSION DISABLE PARALLEL DML;
在不打開並發dml情況下600萬數據
HINT 放在不同位置的變化不大
insert into /*+parallel(A,10)*/ TEST A SELECT * FROM TEST_TEM B; 44S
insert into TEST A SELECT/*+parallel(B,10)*/ * FROM TEST_TEM B; 41S
insert into /*+parallel(A,10)*/TEST A SELECT/*+parallel(B,10)*/ * FROM TEST_TEM B; 49S
完全不用並發HINT /*+parallel(A,10)*/反而快
insert into TEST select * from TEST_TEM;36秒
在打開pdml情況下600萬數據
alter session enable parallel dml;
HINT 放在不同位置的變化很大
insert into /*+parallel(A,10)*/ TEST A SELECT * FROM TEST_TEM B; 10s
insert into TEST A SELECT/*+parallel(B,10)*/ * FROM TEST_TEM B; 24S
insert into /*+parallel(A,10)*/TEST A SELECT/*+parallel(B,10)*/ * FROM TEST_TEM B; 1S
完全不用並發HINT /*+parallel(A,10)*/
insert into TEST select * from TEST_TEM;39秒(每次有少許差異).
在並發INSERT的時候,數據是被使用APPEND方式插入到表中,如果需要常規方式插入,需要加上noappend提示.
parallel query
select /*+parallel(t,8)*/ * from mxq t ;