关于redo size(一)

     要辞职了,总是无比轻松,于是今天闲着做了做1z0-042的题库,其中有一个关于truncate的,正确答案是truncate可以产生很少的redo,实践出真实,我做个试验验证一下。

     step1 建表

1 create table test as select * from dba_objects;

     step2 统计出现在的redosize

     

select name, value from v$sysstat a where a.name = 'redo size';

      记录下redo size:32378840。

     step3 truncate该表,之后统计redo size

truncate table test1;

      现在的redo size:32423748。

      可以看出,redo size增长了:44908。

      step4 删掉这张表,依上述法则重建,并且记录redo size。

      

1 drop table test1;
2 create table test1 as select * from dba_objects;
3 select name, value from v$sysstat a where a.name = 'redo size';

      现在的redo size:32737804。

      step5 用普通的办法删除,并记录redo size:

      

1 delete from test1;
2 commit; --commit本身不产生redo
3 select name, value from v$sysstat a where a.name = 'redo size';

     现在的redo size:59415540。

     与之前的记录数相减:26677736。

     由此可见,使用truncate的好处就是可以产生非常少量的redo,因此其删除速度理论上讲,要高于delete。在这实验之前,我们按照甲方要求,清空了一张3G大的数据表,当时因为对truncate认识不足,认为会占用很长的时间,因此我已经做好了将电脑留在办公室跑一夜的打算,但是没想到一眨眼的功夫,这样表就被清空了,可惜当时没有记录下redo size的变化,不然现在拿出来也是一个很好的例证。

     这就当作第一篇吧,以后还要慢慢的研究SQL和redo。

原文地址:https://www.cnblogs.com/wingsless/p/2278618.html