ctas 與create table後insert

下面是測試結論,此結論只是在本測試環境有效。
 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只對表有效,對索引無效。
     下面是詳細的測試步驟
 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 
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 
相關文章
相關標籤/搜索