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 

转载于:https://my.oschina.net/u/138995/blog/212795

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值