Oracle中的append parallel关键字
append parallel关键字
并发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 ;
转自于:https://blog.csdn.net/weixin_30681121/article/details/96447575