Oracle 10g:事务中第一条insert语句生成的重做量
我试图查看不同insert语句生成的重做量。 我看到对于事务中的第一次插入,重做大小显示为零。 下一次插入将生成2664字节的重做(可能是最后两次插入)。 所有后续插入都会生成预期的重做次数 我使用的数据库是10.2.0.4Oracle 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
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版-生产