Oracle 10g:事务中第一条insert语句生成的重做量

Oracle 10g:事务中第一条insert语句生成的重做量,oracle,oracle10g,Oracle,Oracle10g,我试图查看不同insert语句生成的重做量。 我看到对于事务中的第一次插入,重做大小显示为零。 下一次插入将生成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

我试图查看不同insert语句生成的重做量。 我看到对于事务中的第一次插入,重做大小显示为零。 下一次插入将生成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
有人能解释一下为什么会这样吗

谢谢

拉杰什。

在XE上复制

如果你在谷歌上搜索“内存撤销”和“私有重做线程”,可能会有一些相关的讨论。乙二醇

“小型”交易,10g 生成私有重做,但不执行 将更改应用于块,直到 提交。但是,该标志 (x$bh.flag)将位3设置为1以显示 该私有重做存在于 街区

当提交发生时,重做将停止 应用于块,在哪个点 块被标记为脏,则 然后将私有重做复制到 已发布公共重做缓冲区和LGWR 将重做写入光盘 相关撤消块的处理 这是相似的。”


正如Gary指出的那样,这实际上是由于私有重做机制造成的。 然而,在生成大量red之后,而不是在提交之后,更改被推送到公共链

这个问题已经在Oracle技术论坛上得到了回答。 请阅读以下帖子中乔纳森·刘易斯和塔内尔·波德的评论。

无法在
10.2.0.1.0
上复制您是否也看到第一次插入的重做量?(在10.2.0.1中)这是我的版本信息。。Oracle Database 10g Enterprise Edition 10.2.0.4.0版-64bi PL/SQL 10.2.0.4.0版-生产核心10.2.0.4.0 Solaris生产TNS:10.2.0.4.0版-生产NLSRTL 10.2.0.4.0版-生产