|
原帖由 xsmdel 于 2010-4-9 23:42 发表 ![]()
索性来个更全面的测试,带着点疑问版主
SQL> create table parallel_test as select * from dba_objects;
Table created
SQL> select table_name, degree from user_tables where table_name = upper('parallel_test');
TABLE_NAME DEGREE
------------------------------ --------------------
PARALLEL_TEST 1
SQL> insert into parallel_test select * from dba_objects;
49875 rows inserted
SQL> insert into parallel_test select * from dba_objects;
49875 rows inserted
SQL> insert into parallel_test select * from dba_objects;
49875 rows inserted
SQL> drop table parallel_test;
Table dropped
SQL> create table parallel_test parallel (degree 4) as select * from dba_objects;
Table created
SQL> select table_name,degree from user_tables where table_name=upper('parallel_test');
TABLE_NAME DEGREE
------------------------------ --------------------
PARALLEL_TEST 4
SQL> insert into paraller_test select * from dba_objects;
insert into paraller_test select * from dba_objects
ORA-00942: 表或视图不存在
SQL> insert into parallel_test select * from dba_objects;
49875 rows inserted
SQL> insert into parallel_test select * from dba_objects;
49875 rows inserted
SQL> insert into parallel_test select * from dba_objects;
49875 rows inserted
SQL>
我把并行度调整成了4还是没有问题,没有commit;
看来真是经典案例,你举的例子中的并行根本没有生效,所以当然不会有这个问题,你继续做实验,只不过在这个SESSION 设置alter session enable parallel dml;
你就明白了
SQL>
SQL> drop table parallel_test;
Table dropped
SQL> create table parallel_test parallel (degree 4) as select * from dba_objects;
Table created
SQL> alter session enable parallel dml;
Session altered
SQL> select table_name,degree from user_tables where table_name=upper('parallel_test');
TABLE_NAME DEGREE
------------------------------ --------------------
PARALLEL_TEST 4
SQL> insert into parallel_test select * from parallel_test;
59160 rows inserted
SQL> insert into parallel_test select * from parallel_test;
insert into parallel_test select * from parallel_test
ORA-12838: 无法在并行模式下修改之后读/修改对象
SQL>
如下是你的例子
SQL> create table parallel_test parallel (degree 4) as select * from dba_objects;
Table created
SQL> select table_name,degree from user_tables where table_name=upper('parallel_test');
TABLE_NAME DEGREE
------------------------------ --------------------
PARALLEL_TEST 4
SQL> insert into parallel_test select * from parallel_test;
59161 rows inserted
SQL> insert into parallel_test select * from parallel_test;
118322 rows inserted
SQL>
差别知道了吧:)
其实完全可以通过执行计划和select * from v$px_session 等观察出来,你的例子并行度根本没生效,《ORACLE+UNIX易错集锦》前面就是描述这个为什么执行中看不到并行的例子,你可能没注意看:)
[ 本帖最后由 wabjtam123 于 2010-4-10 09:14 编辑 ] |
|