測試環境:OS:RHEL 5.4 X86 DB:10.2.0.4 歸檔模式sql
下面是測試結論,此結論只是在本測試環境有效。c#
- 1,ctas與create table後insert語句產生的redo是差很少的。
- 2,ctas生成的undo遠遠小於create table and insert方式。
- 3,ctas生成的undo與create table後insert /*+ append */差很少。
- 4,ctas nologging方法生成的log遠遠小於其它的方式。
- 5,append方式並不必定能減小redo的生成,可是確定能減小undo的生成。
- 6,append減小redo,前提是表在nologging方式下面,注意這裏表上面沒有索引,append只對表有效,對索引無效。
下面是詳細的測試步驟app
1,ctas方式生成的undo與redo
- SQL> SELECT a.name, b.VALUE
- 2 FROM v$sysstat a, v$mystat b
- 3 WHERE a.statistic# = b.statistic#
- 4 AND a.name IN ('redo size', 'undo change vector size');
- NAME VALUE
- ---------------------------------------------------------------- ----------
- redo size 0
- undo change vector size 0
- SQL> create table scott.test_ctas as select * from dba_objects;
- SQL> /* Formatted on 2013/3/8 22:07:44 (QP5 v5.240.12305.39476) */
- SQL> SELECT a.name, b.VALUE
- 2 FROM v$sysstat a, v$mystat b
- 3 WHERE a.statistic# = b.statistic#
- 4 AND a.name IN ('redo size', 'undo change vector size');
- NAME VALUE
- ---------------------------------------------------------------- ----------
- redo size 5794552
- undo change vector size 23812
2,ctas nologging方式生成的undo與redo
- SQL> SELECT a.name, b.VALUE
- 2 FROM v$sysstat a, v$mystat b
- 3 WHERE a.statistic# = b.statistic#
- 4 AND a.name IN ('redo size', 'undo change vector size');
- NAME VALUE
- ---------------------------------------------------------------- ----------
- redo size 0
- undo change vector size 0
- SQL> create table scott.test_ctas_nologging nologging as select * from dba_objects;
- Table created.
- SQL> SELECT a.name, b.VALUE
- 2 FROM v$sysstat a, v$mystat b
- 3 WHERE a.statistic# = b.statistic#
- 4 AND a.name IN ('redo size', 'undo change vector size');
- NAME VALUE
- ---------------------------------------------------------------- ----------
- redo size 88576
- undo change vector size 22008
- 這種方式生成的UNDO,REDO的大小都是最好的,
3,普通表與insert生成的undo與redo
- SQL> SELECT a.name, b.VALUE
- 2 FROM v$sysstat a, v$mystat b
- 3 WHERE a.statistic# = b.statistic#
- 4 AND a.name IN ('redo size', 'undo change vector size');
- NAME VALUE
- ---------------------------------------------------------------- ----------
- redo size 0
- undo change vector size 0
- SQL> create table scott.test_normal as select * from dba_objects where 1=0;
- Table created.
- SQL> SELECT a.name, b.VALUE
- 2 FROM v$sysstat a, v$mystat b
- 3 WHERE a.statistic# = b.statistic#
- 4 AND a.name IN ('redo size', 'undo change vector size');
- NAME VALUE
- ---------------------------------------------------------------- ----------
- redo size 19848
- undo change vector size 5712
- SQL> insert into scott.test_normal select * from dba_objects;
- 50350 rows created.
- SQL> SELECT a.name, b.VALUE
- 2 FROM v$sysstat a, v$mystat b
- 3 WHERE a.statistic# = b.statistic#
- 4 AND a.name IN ('redo size', 'undo change vector size');
- NAME VALUE
- ---------------------------------------------------------------- ----------
- redo size 5725444
- undo change vector size 208092
4,普通create表與insert append方式生成的redo與undo
- SQL> SELECT a.name, b.VALUE
- 2 FROM v$sysstat a, v$mystat b
- 3 WHERE a.statistic# = b.statistic#
- 4 AND a.name IN ('redo size', 'undo change vector size');
- NAME VALUE
- ---------------------------------------------------------------- ----------
- redo size 0
- undo change vector size 0
- SQL> create table scott.test_normal_append as select * from dba_objects where 1=2;
- Table created.
- SQL> SELECT a.name, b.VALUE
- 2 FROM v$sysstat a, v$mystat b
- 3 WHERE a.statistic# = b.statistic#
- 4 AND a.name IN ('redo size', 'undo change vector size');
- NAME VALUE
- ---------------------------------------------------------------- ----------
- redo size 21224
- undo change vector size 6072
- SQL> insert /*+ append */ into scott.test_normal_append select * from dba_objects;
- 50350 rows created.
- SQL> SELECT a.name, b.VALUE
- 2 FROM v$sysstat a, v$mystat b
- 3 WHERE a.statistic# = b.statistic#
- 4 AND a.name IN ('redo size', 'undo change vector size');
- NAME VALUE
- ---------------------------------------------------------------- ----------
- redo size 5771092
- undo change vector size 21072
5,nologging方式的create表與insert append方式生成的undo與redo
- SQL> SELECT a.name, b.VALUE
- 2 FROM v$sysstat a, v$mystat b
- 3 WHERE a.statistic# = b.statistic#
- 4 AND a.name IN ('redo size', 'undo change vector size');
- NAME VALUE
- ---------------------------------------------------------------- ----------
- redo size 0
- undo change vector size 0
- SQL> create table scott.test_normal_append_nologging nologging as select * from dba_objects where 1=2;
- Table created.
- SQL> SELECT a.name, b.VALUE
- 2 FROM v$sysstat a, v$mystat b
- 3 WHERE a.statistic# = b.statistic#
- 4 AND a.name IN ('redo size', 'undo change vector size');
- NAME VALUE
- ---------------------------------------------------------------- ----------
- redo size 37568
- undo change vector size 14204
- SQL> insert /*+ append */ into scott.test_normal_append_nologging select * from dba_objects;
- 50351 rows created.
- SQL> SELECT a.name, b.VALUE
- 2 FROM v$sysstat a, v$mystat b
- 3 WHERE a.statistic# = b.statistic#
- 4 AND a.name IN ('redo size', 'undo change vector size');
- NAME VALUE
- ---------------------------------------------------------------- ----------
- redo size 142944
- undo change vector size 46744