下面是測試結論,此結論只是在本測試環境有效。 |
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 |