Oracle 10g:为事务中的第一个插入语句生成的重做次数

时间:2009-11-19 18:11:37

标签: oracle oracle10g

我试图查看不同插入语句生成的重做数量。 我看到,对于事务中的第一个插入,重做大小显示为零。 下一个插入生成一个2664字节的重做(可能是最后两个插入)。 所有后续插入都会生成预期的重做次数。

我使用的数据库是10.2.0.4

create table temp (
  x int, y char(1000), z date);

Table created.

set autotrace traceonly statistics;

sql> insert into temp values (1, user, sysdate );

1 row created.


Statistics
----------------------------------------------------------
          1  recursive calls
          5  db block gets
          1  consistent gets
          0  physical reads
          0  redo size
        358  bytes sent via SQL*Net to client
        319  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
          1  rows processed

- 仅显示后续插入的重做大小...

sql> insert into temp values (2, user, sysdate);

1 row created.


Statistics
------------
2664  redo size

sql> insert into temp values (3, user, sysdate);

1 row created.


Statistics
----------------------------------------------------------
1300  redo size

sql> insert into temp values (4, user, sysdate);

1 row created.


Statistics
----------------------------------------------------------
1368  redo size

有人可以解释为什么会这样吗?

谢谢,

拉​​杰什。

2 个答案:

答案 0 :(得分:1)

转载于XE。

如果您使用Google“In Memory Undo”和“Private Redo Threads”,那么可能会有一些相关的讨论。 EG this

  

“对于”小“交易,10g   生成私有重做但没有   将更改应用于块直到   提交。但是国旗   (x $ bh.flag)将第3位设置为1来显示   那个私人重做是存在的   块。

     

提交时,重做是   应用于块,此时   块被标记为脏,   私有重做然后被复制到   公共重做缓冲区和LGWR已发布   将重做写入光盘。 (该   处理相关的撤销块   是类似的。“

答案 1 :(得分:1)

实际上,由于加里指出的私人重做机制,这个问题已经出现了。 但是,在生成大量红色后,更改将被推送到公共线,而不是在提交之后。

此问题已在Oracle技术论坛上得到解答。 请阅读Jonathan Lewis和Tanel Poder在以下主题中的评论。 http://forums.oracle.com/forums/thread.jspa?messageID=3915905&#3915905