create table as select 与create table后insert方式生成的undo与redo对比

      测试环境:OS:RHEL 5.4 X86  DB:10.2.0.4  归档模式

      下面是测试结论,此结论只是在本测试环境有效。

  
  
  
  
  1. 1,ctas与create table后insert语句产生的redo是差不多的。 
  2. 2,ctas生成的undo远远小于create table and insert方式。 
  3. 3,ctas生成的undo与create table后insert /*+ append */差不多。 
  4. 4,ctas nologging方法生成的log远远小于其它的方式。 
  5. 5,append方式并不一定能减少redo的生成,但是肯定能减少undo的生成。 
  6. 6,append减少redo,前提是表在nologging方式下面,注意这里表上面没有索引,append只对表有效,对索引无效。

     下面是详细的测试步骤

  
  
  
  
  1. 1,ctas方式生成的undo与redo 

  2. SQL> SELECT a.name, b.VALUE 
  3.   2    FROM v$sysstat a, v$mystat b 
  4.   3   WHERE     a.statistic# = b.statistic# 
  5.   4         AND a.name IN ('redo size''undo change vector size'); 
  6.  
  7. NAME                                                                  VALUE 
  8. ---------------------------------------------------------------- ---------- 
  9. redo size                                                                 0 
  10. undo change vector size                                                   0 
  11. SQL> create table scott.test_ctas as select * from dba_objects; 
  12. SQL> /* Formatted on 2013/3/8 22:07:44 (QP5 v5.240.12305.39476) */ 
  13. SQL> SELECT a.name, b.VALUE 
  14.   2    FROM v$sysstat a, v$mystat b 
  15.   3   WHERE     a.statistic# = b.statistic# 
  16.   4         AND a.name IN ('redo size''undo change vector size'); 
  17.  
  18. NAME                                                                  VALUE 
  19. ---------------------------------------------------------------- ---------- 
  20. redo size                                                           5794552 
  21. undo change vector size                                               23812 
  22.  
  23. 2,ctas nologging方式生成的undo与redo 

  24.  
  25. SQL> SELECT a.name, b.VALUE 
  26.   2    FROM v$sysstat a, v$mystat b 
  27.   3   WHERE     a.statistic# = b.statistic# 
  28.   4         AND a.name IN ('redo size''undo change vector size'); 
  29.  
  30. NAME                                                                  VALUE 
  31. ---------------------------------------------------------------- ---------- 
  32. redo size                                                                 0 
  33. undo change vector size                                                   0 
  34.  
  35. SQL> create table scott.test_ctas_nologging nologging as select * from dba_objects; 
  36.  
  37. Table created. 
  38.  
  39. SQL> SELECT a.name, b.VALUE 
  40.   2    FROM v$sysstat a, v$mystat b 
  41.   3   WHERE     a.statistic# = b.statistic# 
  42.   4         AND a.name IN ('redo size''undo change vector size'); 
  43.  
  44. NAME                                                                  VALUE 
  45. ---------------------------------------------------------------- ---------- 
  46. redo size                                                             88576 
  47. undo change vector size                                               22008 
  48.  
  49. 这种方式生成的UNDO,REDO的大小都是最好的, 
  50.  
  51.  
  52. 3,普通表与insert生成的undo与redo 

  53.  
  54. SQL> SELECT a.name, b.VALUE                                         
  55.   2    FROM v$sysstat a, v$mystat b 
  56.   3   WHERE     a.statistic# = b.statistic# 
  57.   4         AND a.name IN ('redo size''undo change vector size'); 
  58.  
  59. NAME                                                                  VALUE 
  60. ---------------------------------------------------------------- ---------- 
  61. redo size                                                                 0 
  62. undo change vector size                                                   0 
  63.  
  64. SQL> create table scott.test_normal as select * from dba_objects where 1=0; 
  65.  
  66. Table created. 
  67.  
  68. SQL> SELECT a.name, b.VALUE 
  69.   2    FROM v$sysstat a, v$mystat b 
  70.   3   WHERE     a.statistic# = b.statistic# 
  71.   4         AND a.name IN ('redo size''undo change vector size'); 
  72.  
  73. NAME                                                                  VALUE 
  74. ---------------------------------------------------------------- ---------- 
  75. redo size                                                             19848 
  76. undo change vector size                                                5712 
  77.  
  78. SQL> insert into scott.test_normal select * from dba_objects; 
  79.  
  80. 50350 rows created. 
  81.  
  82. SQL> SELECT a.name, b.VALUE 
  83.   2    FROM v$sysstat a, v$mystat b 
  84.   3   WHERE     a.statistic# = b.statistic# 
  85.   4         AND a.name IN ('redo size''undo change vector size'); 
  86.  
  87. NAME                                                                  VALUE 
  88. ---------------------------------------------------------------- ---------- 
  89. redo size                                                           5725444 
  90. undo change vector size                                              208092 
  91.  
  92.  

  93. 4,普通create表与insert append方式生成的redo与undo 

  94. SQL> SELECT a.name, b.VALUE 
  95.   2    FROM v$sysstat a, v$mystat b 
  96.   3   WHERE     a.statistic# = b.statistic# 
  97.   4         AND a.name IN ('redo size''undo change vector size'); 
  98.  
  99. NAME                                                                  VALUE 
  100. ---------------------------------------------------------------- ---------- 
  101. redo size                                                                 0 
  102. undo change vector size                                                   0 
  103.  
  104. SQL> create table scott.test_normal_append as select * from dba_objects where 1=2; 
  105.  
  106. Table created. 
  107.  
  108. SQL> SELECT a.name, b.VALUE 
  109.   2    FROM v$sysstat a, v$mystat b 
  110.   3   WHERE     a.statistic# = b.statistic# 
  111.   4         AND a.name IN ('redo size''undo change vector size'); 
  112.  
  113. NAME                                                                  VALUE 
  114. ---------------------------------------------------------------- ---------- 
  115. redo size                                                             21224 
  116. undo change vector size                                                6072 
  117.  
  118. SQL> insert /*+ append */ into scott.test_normal_append select * from dba_objects;     
  119.  
  120. 50350 rows created. 
  121.  
  122. SQL> SELECT a.name, b.VALUE 
  123.   2    FROM v$sysstat a, v$mystat b 
  124.   3   WHERE     a.statistic# = b.statistic# 
  125.   4         AND a.name IN ('redo size''undo change vector size'); 
  126.  
  127. NAME                                                                  VALUE 
  128. ---------------------------------------------------------------- ---------- 
  129. redo size                                                           5771092 
  130. undo change vector size                                               21072 
  131.  

  132. 5,nologging方式的create表与insert append方式生成的undo与redo 

  133.  

  134. SQL> SELECT a.name, b.VALUE 
  135.   2    FROM v$sysstat a, v$mystat b 
  136.   3   WHERE     a.statistic# = b.statistic# 
  137.   4         AND a.name IN ('redo size''undo change vector size');  
  138.  
  139. NAME                                                                  VALUE 
  140. ---------------------------------------------------------------- ---------- 
  141. redo size                                                                 0 
  142. undo change vector size                                                   0 
  143.  
  144. SQL> create table scott.test_normal_append_nologging nologging as select * from dba_objects where 1=2; 
  145.  
  146. Table created. 
  147.  
  148. SQL> SELECT a.name, b.VALUE 
  149.   2    FROM v$sysstat a, v$mystat b 
  150.   3   WHERE     a.statistic# = b.statistic# 
  151.   4         AND a.name IN ('redo size''undo change vector size'); 
  152.  
  153. NAME                                                                  VALUE 
  154. ---------------------------------------------------------------- ---------- 
  155. redo size                                                             37568 
  156. undo change vector size                                               14204 
  157.  
  158. SQL> insert /*+ append */ into scott.test_normal_append_nologging select * from dba_objects;   
  159.  
  160. 50351 rows created. 
  161.  
  162. SQL> SELECT a.name, b.VALUE 
  163.   2    FROM v$sysstat a, v$mystat b 
  164.   3   WHERE     a.statistic# = b.statistic# 
  165.   4         AND a.name IN ('redo size''undo change vector size'); 
  166.  
  167. NAME                                                                  VALUE 
  168. ---------------------------------------------------------------- ---------- 
  169. redo size                                                            142944 
  170. undo change vector size                                               46744 

 

你可能感兴趣的:(select,append,ctas)