加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

删除一张大表时为什么undo占用空间接近原表两倍?

发布时间:2019-09-22 23:29:19 所属栏目:编程 来源:波波说运维
导读:概述 Oracle中,undo是生涯记录的前镜像的,我领略假如delete from t;那发生的undo应该和t表的巨细差不多,但测试功效却差的很远,undo发生的量根基上是t表巨细的两倍,不知道为什么,莫非我领略错了?下面看下这个稀疏的征象。 1. delete了8个小时 2. 原

概述

Oracle中,undo是生涯记录的前镜像的,我领略假如delete from t;那发生的undo应该和t表的巨细差不多,但测试功效却差的很远,undo发生的量根基上是t表巨细的两倍,不知道为什么,莫非我领略错了?下面看下这个稀疏的征象。

删除一张大表时为什么undo占用空间靠近原表两倍?

1. delete了8个小时

删除一张大表时为什么undo占用空间靠近原表两倍?

2. 原表巨细

可以发明原表也就16.5G,必要删的数据是9G。

删除一张大表时为什么undo占用空间靠近原表两倍?

3. 查察undo块

这里健忘截图了,可是是有300多万个块,查察对应占用的undo空间是占了30多G,远远高出原表的巨细。

为什么undo会占用这么多空间?

从道理上讲,UNDO表空间,有四个浸染:

  • 回滚事宜;
  • 同等性读;
  • 事宜规复;
  • 闪回查询

求教杨长老获得的一些信息:

对付回滚事宜,他生涯的是修改值的前镜像,留意,不是修改的数据块,可能整行记录的镜像。

除了思量表巨细之外,尚有表上索引的总巨细,是否存在触发器,物化试图日记等等。其它,看看数据库级的supplemental log是否打开。

undo是记录事物修改前镜像的,而delete的前镜像就是表中存储的数据。虽然有一些也许会导致前镜像比表中的原始数据大,好比压缩,11g后存在的非空默认值。

其它,undo的记录必然有一些特另外本钱,好比rowid,scn等信息,假如表中行记录自己很小,那么这些本钱就会显得很是突出。

假如要很是准确地知道,多出来的每一个信息是几多,确实有些坚苦,但通过这个尝试,至少能相识到,一次delete操纵删除的容量,UNDO为了生涯前镜像,必要占有的容量,要比他多得多,这就是为什么不保举一次delete操纵删除过大都据的缘故起因之一。

总之,对付delete大量数据的环境必然要分批举办,甘愿时刻花多点,风险也会少许多,停止不测导致回滚而造成的数据库卡顿。

【编辑保举】

  1. 详解Oracle数据库主键SYS_GUID()
  2. 关于Oracle数据库Kfk: Async Disk IO守候变乱深度理会
  3. Oracle 推出了完全自治的操纵体系
  4. Oracle宣布环球最快的数据库呆板Exadata X8M
  5. Oracle和MySQL的JDBC到底有多慢?
【责任编辑:赵宁宁 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读