Oracle中临时表产生过量Redo的说明

原创 2004年07月04日 12:41:00

最近,在Oracle9i中你用过临时表吗?

它是否给你带来了性能提高?你注意过么?

好了言归正传.

我们知道临时表在DML操作中可以减少redo的生成,从而在保存中间结果集时可以带来较大的性能提高.

可是,如果你注意到了,在Oracle9i里,临时表可能比常规表还要产生更多的redo:

[oracle@jumper oracle]$ sqlplus eygle/eygle

SQL*Plus: Release 9.2.0.3.0 - Production on Sat Jul 3 16:37:01 2004

Copyright (c) 1982, 2002, Oracle Corporation.? All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production ----请注意版本
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.3.0 - Production

SQL> create table ccc1? (c1 number);

Table created.

SQL> set autotrace trace stat
SQL> insert into ccc1 select rownum from dba_objects;
10468 rows created.


Statistics
----------------------------------------------------------
???????? 73? recursive calls
??????? 175? db block gets
????? 25623? consistent gets
???????? 36? physical reads
???? 157336? redo size --------------------常规表产生的redo,大约154K
??????? 622? bytes sent via SQL*Net to client
??????? 547? bytes received via SQL*Net from client
????????? 3? SQL*Net roundtrips to/from client
????????? 2? sorts (memory)
????????? 0? sorts (disk)
????? 10468? rows processed


SQL> create global temporary table ccc2 (c1 number) ;

Table created.

SQL> set autotrace trace stat
SQL> insert into ccc2 select rownum from dba_objects;

10468 rows created.


Statistics
----------------------------------------------------------
??????? 135? recursive calls
????? 10897? db block gets
????? 25653? consistent gets
??????? 115? physical reads
??? 1476012? redo size ---------------------这是临时表,产生了大约1.4M的redo
??????? 622? bytes sent via SQL*Net to client
??????? 547? bytes received via SQL*Net from client
????????? 3? SQL*Net roundtrips to/from client
????????? 2? sorts (memory)
????????? 0? sorts (disk)
????? 10468? rows processed

这使得在Oracle9i的这些版本中,使用临时表的意义不大了.

?

今天down了个Oracle9205的patch,测试一下在Oracle9205中的情况:

?

?
 

在9205中Oracle修正了这个bug.

如果你从来没有遇到这个bug,那么你是幸运的:)

?

在buglist中,找到了以下说明:

2874489: Excessive REDO generated for INSERT as SELECT into GLOBAL TEMPORARY TABLES.

Fixed: 9205

?

临时表终于回来了!

?

2004年7月3日 星期六 17:53

If you have any question,please mail to eygle@itpub.net .

?

临时表真的不生成redo日志吗?

澄清大家一个常见的错误:临时表是否产生redo 临时表本身的操作并不产生redo,但是在临时表中处理数据时,是要产生undo的,而undo是要产生redo的,但相比较普通表要少很多。 [oracl...
  • zhuxiaoliao
  • zhuxiaoliao
  • 2014年11月07日 14:29
  • 421

普通表与临时表DML操作会产生REDO/UNDO对比与分析

ORACLE临时表介绍: ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables。这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据。当...
  • q947817003
  • q947817003
  • 2013年09月17日 08:39
  • 2325

临时表 DML 产生redo 问题说明

 关于Oracle 临时表,参考我的Blog:            Oracle 临时表            http://blog.csdn.net/tianlesoftware/archive...
  • tianlesoftware
  • tianlesoftware
  • 2011年05月30日 14:57
  • 3708

理解redo(11)truncate和select的redo

很多系统,在作删除操作时,都只是做一个标志位,并不会去做磁盘置0那样昂贵的操作。truncate也如是,更改的只是segment header和i-node表。truncate 会产生redo,是修改...
  • linwaterbin
  • linwaterbin
  • 2012年09月06日 14:43
  • 2148

direct insert下不会产生数据的 UNDO

    从理论上来说,对于 direct insert 的 undo (rowid)实在没有存在的必要,因为HWM 在移动的过程中,这些block是不能被其他process使用的,那么,意味着,只要记...
  • biti_rainy
  • biti_rainy
  • 2004年07月04日 15:30
  • 2408

DDL操作产生UNDO和REDO的示例

DDL操作产生产生UNDO和REDO。原因是: delete 需要把每个有数据的数据块读出来,写上delete标记, 另外还要把delete的内容拷一份到undo,还要把它的动作记到redo。 而...
  • q947817003
  • q947817003
  • 2013年09月07日 20:35
  • 1405

对比DML操作产生的REDO及UNDO大小

结论:相同数据量的数据操作: INSERT产生最少REDO;UPDATA首先的REDO居中;DELETE产生最多REDO。 DELETE产生UNDO最多,UPDATE次之,INSERT产生UN...
  • q947817003
  • q947817003
  • 2013年09月07日 20:19
  • 1632

实验: Oracle中表shrink与move产生redo日志比较

1 move时实验 SQL> create table my_objects_move tablespace ASSM as select * from all_objects where rown...
  • huang_xw
  • huang_xw
  • 2011年11月27日 11:50
  • 3050

oracle 临时表 with as 写法

项目中早些时间,有个oracle查询语句写的极其复杂,因为数据量小的关系,当时也并没有怎么在意,回来随着时间过去,客户数据库数量越来越大,那段语句的劣性就体现的非常明显。优化时,发现查询关系逻辑混乱又...
  • rick_123
  • rick_123
  • 2017年03月08日 11:41
  • 1161

oracle中创建临时表方法

1.首先必须有权限: 创建临时表的用户好像必须要有CREATE ANY TABLE 如果你有这个权限的还 按照上面两位说得一定可以。   2.建表的语法示例: -------创建虚拟表 ...
  • gal1024
  • gal1024
  • 2014年11月11日 23:18
  • 755
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle中临时表产生过量Redo的说明
举报原因:
原因补充:

(最多只允许输入30个字)