分析验证什么DML操作会生成最多和最少的 undo

【验证知识】
一般来讲,INSERT 生成的 undo 最少,因为 Oracle 为此需记录的只是要“删除”的一个rowid(行ID) 。UPDATE 一般排名第二(在大多数情况下)。DELETE生成的 undo最多。与加索引列的更新相比,对一个未加索引的列进行更新不仅执行得更快,生成的 undo 也会好得多。而更新有索引的列则可能生成大量的undo,因为索引结构本身所固有的复杂性,而且我们更新了这个表中的每一行,移动了这个结构中的索引键值。

 一、测试目标:
 DML语句操作使用UNDO表空间新增大小的情况测试
二、测试内容
 对单一表HIS_Recipe_Test进行INSERT、DELETE、UPDATE相关操作,记录各个DML操作占用UNDO表空间的情况。
三、测试步骤
 1、Create Table His_Recipe_Test。
 2、查询UNDO表空间已被使用32.687MB。
 3、INSERT INTO HIS_RECIPE_TEST表100万条记录。
 4、查询第3步INSERT后的UNDO表空间已被使用35.75MB,与第2步求差值得出第3步新增UNDO表空间3.063MB
 5、执行DELETE * FROM HIS_RECIPE_TEST删除200万条记录。
 6、查询第5步DELTE后的UNDO表空间已被使用538.75MB,与第3步求差值得出第6步新增UNDO表空间503.00MB
 7、执行INSERT INTO HIS_RECIPE_TEST表4532279条记录。
 8、查询UNDO查询新增UNDO表空间18MB
 9、将100万数据分成1000次删除记录,测试后发现UNDO表空间新增255MB空间
四、测试结果
 测试完成后,得出如下结论:
 1、占用UNDO表空间大小的DML操作:DELETE > UPDATE > INSERT
 2、不管海量或分次DML语句操作数据,其占用的UNDO表空间大小相差不大。
 3、频繁的大数据量DML操作数据,会造成UNDO表空间消耗极大,甚至不能满足ORACLE的所有活动事务。
五、补充(经历过)
 UNDO表空间太小不能满足使用它的所有活动事务,那么会发生以下情况:
 1、  如果撤销表空间用完85%,Oracle将发布一个自动表空间警告
 2、  当撤销表空间用完97%时,Oracle将发布一个自动表空间严重警告
 3、  所有DML语句将不允许,并且会接收到一个空间超出错误
 4、  DDL语句允许继续执行

转载于:https://my.oschina.net/u/174862/blog/285983

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值