UNDO SEGMENT的扩展和收缩

当发生一个DML操作时,服务器进程会选择一个undo segment。AUM采用的是事务绑定undo segment的算法:
1、首先尝试将每个undo段绑定一个事务,也就是每个undo segment上只被一个事务使用。
2、如果不能发现完全空闲的(也就是没有与任何事务绑定)undo segment,则系统会尝试将其他脱机的undo segment脱机。
3、如果没有可用的undo segment进行联机,则会尝试创建一个新的undo segment。
4、如果上面步骤都不可行,也就是创建新的undo segment也没有可用空间了,则事务绑定算法才会尝试去找最早被使用的那个undo segment。这种情况下,才可能出现多个事务在同一个undo segment中存在。

undo segment的收缩通过SMON实现:

1、每隔12个小时收缩一次,删除那些idle状态的extents。
2、当前台进程进行DML而需要undo时,发现空间不够用,则会唤醒SMON收缩一次。也就是说将其他undo segment里暂时不用的extents拿来用。
使用AUM,并设置了undo_retention,undo块存在四种状态:
Active:正在使用该undo的事务还没有提交或回滚。
Inactive:该undo上没有活动的事务,该状态的undo可以被其他事务覆盖。
Expired:该undo持续inactive的时间超过undo_retention设定时间。
Free:该undo块是空的,从来没有被使用过。

当活动的事务使用undo segment时,在AUM模式下,事务可以在不同的undo segment之间交换undo空间,也就是在不同的undo segment
里交换extents。当一个正在执行的事务需要更多的undo空间时,首先会重用当前undo segment里的可用空间;如果当前undo segment
里的可用空间不足,则会按照下面的步骤获得所需要的extents:
1、获取undo表空间里可用的、空的extents。
2、获取其他undo里的expired状态的extents。
3、如果undo表空间里的数据文件启动了自动扩展(autoextend on),则数据文件进行自动扩展。
4、如果undo表空间里的数据文件没有启用自动扩展,则获取其他undo segment里的inactive状态的extents。
5、如果以上步骤均无法获得可用空间时,报空间不足的错误。
[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24496749/viewspace-1045311/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24496749/viewspace-1045311/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值