oracle redo与undo_笔记8:什么操作会生成最多和最少的undo
分析undo
什么操作会生成最多和最少的undo
这是一个常常问到的问题,不过很容易回答。如果存在索引(或者实际上表就是索引组织表),这将显著地影响生成的undo量,因为索引是一种复杂的数据结构,可能会生成相当多的undo信息。
也就是说,一般来讲,INSERT生成的undo最少,因为Oracle为此所需记录的只是要“删除”的一个ROWID(行ID)。UPDATE一般排名第二(在大多数情况下)。对于UPDATE,只需记录修改的字节。你可能只更新(UPDATE)了整个数据行中很少的一部分,这种情况最常见。因此,必须在undo中记录行的一小部分。前面的许多例子都与这条经验相差,不过这是因为那些例子更新的行很大(有固定大小)。而且它们更新了整个行。更常见的是UPDATE一行,并修改整行中的一小部分。一般来讲,DELETE生成的undo最多。对于DELETE,Oracle必须把整行的前映像记录到undo段中。在redo生成方面,前面的临时表例子展示了这样一个事实:DELETE生成的redo最多,而且由于临时表的DML操作只会把undo记入日志,这实际上也表明DELETE会生成最多的undo。INSERT只生成需要建立日志的很少的undo。UPDATE生成的undo量等于所修改数据的前映像大小,DELETE会生成整个数据集写至undo段。
必须把索引上执行的工作也考虑在内。你会发现,与加索引列的更新相比,对一个未加索引的列进行更新不仅执行得更快,生成的undo也会少得多。例如,下面创建一个有两列表,这两列包含相同的数据,但是其中一列加了索引:
sys@ORCL>l
1 create table t
2 as
3 select object_name unindexed,
4 object_name indexed
5* from all_objects
sys@ORCL>/
Table created.
sys@ORCL>create index t_idx on t(indexed);
Index created.
sys@ORCL>exec dbms_stats.gather_table_stats(user,'T');
PL/SQL procedure successfully completed.
下面更新这个表,首先,更新未加索引的列,然后更新加索引的列。需要一个新的V$查询来测量各种情况下生成的undo量。以下查询可以完成这个工作。它先从V$MYSTAT得到我们的会话ID(SID),再使用这个会话ID在V$SESSION视图中找到相应的会话记录,并获取事务地址(TADDR)。然后使用TADDR拉出我们的V$TRANSACTION记录(如果有),选择USED_UBLK列,即已用undo块的个数。
sys@ORCL>update t set unindexed=los wer(unindexed);
72567 rows updated.
sys@ORCL>select used_ublk
2 from v$transaction
3 where addr=(select taddr
4 from v$session
5 where sid=(select sid
6 from v$mystat
7 where rownum=1
8 )
9 )
10 /
USED_UBLK
----------
1279
sys@ORCL>commit;
Commit complete.
这个UPDATE使用了1279个块来存储其undo。提交会解放这些块,或者将其释放,所以如果再次对V$TRANSACTION运行这个查询,它还会显示no rows selected。更新同样的数据时,不过这一次是加索引的列,会观察到下面的结果:
sys@ORCL>update t set indexed=lower(indexed);
72567 rows updated.
sys@ORCL>select used_ublk
2 from v$transaction
3 where addr=(select taddr
4 from v$session
5 where sid=(select sid
6 from v$mystat
7 where rownum=1
8 )
9 )
10 /
USED_UBLK
----------
2900
可以看到,在这个例子中,更新加索引的列会生成几乎2.5倍的undo。这是因为索引结构本身所固有的复杂性,而且我们更新了这个表中的每一行,移动了这个结构中的每一个索引键值。
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5269.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
