首页 > 数据库 > Oracle > 直接加载和并行记载-01
不久之前记得做过几个测试关于nologging和append的产生redo的。看并行和直接加载刚好有点需要记载的地方就贴blog上了。
直接路径加载将直接绕过buffer cache将数据直接写入磁盘。而且会把数据写入HWM以上的数据块中,所以一般直接路径加载速度上可能比常规加载快。
直接路径加载既可以并行 也可以串行,对分区表和普通表都可以。
Insert /*+append*/ into tt07 select * from dba_objects
当然如果是insert into …values单条插入方式,oracle10G中没有此项功能,网友说到在11G中可以insert /*+append_values*/ into tt07 values( ),不过个人没有11G的测试库也没有测试。
Sql>create table tt07 as select * from dba_objects where 1<>1
Sql>alter table tt07 nologging
SQL> insert into tt07 select * from dba_objects;
已创建48482行。
统计信息
----------------------------------------------------------
628 recursive calls
3990 db block gets
5857 consistent gets
0 physical reads
5468060 redo size
SQL> rollback;
回退已完成。
SQL> insert /*+append*/ into tt07 select * from dba_objects;
已创建48482行。
统计信息
----------------------------------------------------------
168 recursive calls
731 db block gets
4323 consistent gets
0 physical reads
9888 redo size
数据库是oracle 10G 归档模式,虽然表设置了logging模式,但是个人测试发觉首先是nologging和append都不能缺少才能大幅减少redo。但是这里oracle认为不是append直接插入就不管nologging模式还是写入大量redo吗?
其他要点:
如果表有索引dml性能肯定会下降,同样直接加载时也最好alter index indexname unusable 然后再重用索引,同样直接加载会消耗大量的空间。而且加载时表是exclusive模式,不能对其重建索引和dml,这也是需要考虑的地方。
[@more@]来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25362835/viewspace-1056002/ ,如需转载,请注明出处,否则将追究法律责任。