删除一张大表时为什么undo占用空间接近原表两倍?
概述 Oracle中,undo是生涯记录的前镜像的,我领略假如delete from t;那发生的undo应该和t表的巨细差不多,但测试功效却差的很远,undo发生的量根基上是t表巨细的两倍,不知道为什么,莫非我领略错了?下面看下这个稀疏的征象。 1. delete了8个小时 2. 原表巨细 可以发明原表也就16.5G,必要删的数据是9G。 3. 查察undo块 这里健忘截图了,可是是有300多万个块,查察对应占用的undo空间是占了30多G,远远高出原表的巨细。 为什么undo会占用这么多空间? 从道理上讲,UNDO表空间,有四个浸染:
求教杨长老获得的一些信息: 对付回滚事宜,他生涯的是修改值的前镜像,留意,不是修改的数据块,可能整行记录的镜像。 除了思量表巨细之外,尚有表上索引的总巨细,是否存在触发器,物化试图日记等等。其它,看看数据库级的supplemental log是否打开。 undo是记录事物修改前镜像的,而delete的前镜像就是表中存储的数据。虽然有一些也许会导致前镜像比表中的原始数据大,好比压缩,11g后存在的非空默认值。 其它,undo的记录必然有一些特另外本钱,好比rowid,scn等信息,假如表中行记录自己很小,那么这些本钱就会显得很是突出。 假如要很是准确地知道,多出来的每一个信息是几多,确实有些坚苦,但通过这个尝试,至少能相识到,一次delete操纵删除的容量,UNDO为了生涯前镜像,必要占有的容量,要比他多得多,这就是为什么不保举一次delete操纵删除过大都据的缘故起因之一。 总之,对付delete大量数据的环境必然要分批举办,甘愿时刻花多点,风险也会少许多,停止不测导致回滚而造成的数据库卡顿。 【编辑保举】
点赞 0 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |