今天新安装配置了一台oracle数据库服务器,对在归档模式下的数据处理进行了测试。分别执行如下语句
create table test as select * from dba_objects;
或者
create table test nologging as select * from dba_objects;
insert into test select * from test;
或者
insert /*+ append */ into test select * from test;
其中insert 多次执行
这里run是执行的次数,insert count是插入的行数,nocommit是每次插入都不提交,commit是每次插入后提交,/*+append*/也是每次插入后都提交,/*+append*/ nologging是在第一次创建表的时候增加nologging参数
结果如下:
run | insert count | nocommit | commit | /*+append*/ |
1 | 49790 | 00: 00: 00.31 | 00: 00: 00.29 | 00: 00: 00.73 |
2 | 99580 | 00: 00: 00.21 | 00: 00: 00.23 | 00: 00: 00.71 |
3 | 199160 | 00: 00: 01.73 | 00: 00: 02.75 | 00: 00: 04.21 |
4 | 398320 | 00: 00: 03.20 | 00: 00: 03.09 | 00: 00: 06.14 |
5 | 796640 | 00: 00: 32.85 | 00: 00: 32.21 | 00: 00: 12.11 |
6 | 1593280 | 00: 01: 11.93 | 00: 01: 10.89 | 00: 00: 23.18 |
7 | 3186560 | 00: 02: 18.70 | 00: 02: 33.29 | 00: 00: 45.90 |
drop table | 00: 02: 38.31 | 00: 02: 42.01 | 00: 00: 00.56 | |
archive log | 710MB | 710MB | 710MB |
run | insert count | /*+append*/ nologging |
1 | 49790 | 00: 00: 00.64 |
2 | 99580 | 00: 00: 00.92 |
3 | 199160 | 00: 00: 01.68 |
4 | 398320 | 00: 00: 02.82 |
5 | 796640 | 00: 00: 04.57 |
6 | 1593280 | 00: 00: 09.23 |
7 | 3186560 | 00: 00: 17.65 |
drop table | 00: 00: 00.64 | |
archive log | 900KB |
从这个时间的花费上来看 很明显的可以得出以下结论:
1.插入表的耗时随着数据量的增大,基本上是跟数据量成比例的,但是在数据量很小的情况下几乎没有差异。
2.使用append参数,可以有效的减少数据的插入时间。
3.不使用append参数的表 丢弃的时间甚至比最后一次插入的时间还要久,而使用append参数的表丢弃的时间非常短,当然此时实际的数据量是最后一次提交的两倍,因为append参数的作用大家都知道是在每次提交前紧接着前面的数据来存放记录,因此被丢弃的表的数据在一个同一个或者相邻的数据块的情况下速度非常快,反之则非常慢,同理也应该不难得出 在对表进行扫描的情况下数据存放在相邻块的表肯定效率也会是非常高的。
4.append在没有使用nologging的情况下,并不会减少归档日志的产生。
5.将表改为nologging属性的情况下插入数据,几乎不会产生归档日志,但前提是必须要使用append参数,否则产生依然会产生归档日志,只不过表在创建时不会产生归档,我在使用nologging同时不加append的情况下,产生的归档是690M左右,这也就能证明刚才的结论了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12216142/viewspace-613951/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12216142/viewspace-613951/