oracle shrink space的最佳实践

Oracle shrink space分为两阶段:1) 通过删除并插入数据使表块紧凑,此阶段安全且可中断;2) 降低高水位,需加排他锁,可能阻塞DML操作。若表常删数据导致查询慢,可执行shrink操作,但大表需谨慎。完成shrink后,对索引重建可优化性能。
摘要由CSDN通过智能技术生成

shrink space分两个阶段:

1)通过把segment后面的数据delete,然后insert到segment的前面,来把表里的块变得更加紧凑。这个操作的事务单位比较小,操作过程中,会在表上加模式为3的表锁,这种锁的等级跟DML事务在表上加的锁等级一样,一般比较安全,不会阻塞这个表上的DML操作。在这个过程中即使把当前会话取消掉,也不会有风险。下次可以继续上一次的操作。而不是很多人理解的,取消掉后,会回滚之前的所有的delete+insert 操作。由于这个阶段的事务单位比较小,因此取消(比如ctl+c)后,只会回滚此次没有提交掉的事务。如果你的表比较大,那么可以分多次来做这个操作,每次可以放心的把它cancel掉,下次继续。第一个阶段对应的命令为:

alter table table_name shrink space compcat;

从上图看到在执行操作一过程中,ORACLE启动了一个小事务,这个小事务的ID1,ID2在不断的变化。
 2)第二步就是降低高水位,这个过程要在表上加X锁,会造成所有这个表上的DML阻塞。我们可以在做这个操作前,多执行几次阶段一的操作。这样能保证这个时间足够的小。但是无论如何,我测试这个操作的时候,如果表比较大,比如5G,即使执行了多次的操作1,阶段二依然会比较漫长,用10046跟踪,会发现,这个阶段,ORACLE以单块读的形式࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值