ITPub博客

首页 > Linux操作系统 > Linux操作系统 > shrink space的最佳实践

shrink space的最佳实践

原创 Linux操作系统 作者:wei-xh 时间:2011-07-12 13:23:27 0 删除 编辑

shrink space分两个阶段:

1)通过把segment后面的数据delete,然后insert到segment的前面,这个操作的事务单位比较小,在这个过程中即使把进程取消,也不会有问题下次可以继续上一次的操作。而不是很多人理解的,取消掉后,会回滚之前的操作。由于这个阶段的事务单位比较小,因此取消后,只会回滚此次没有提交掉的事务。
 During segment shrink, data will be moved as part of the compaction phase. During
compaction locks will be held on individual rows and/or blocks containing the data.
This will cause the concurrent DMLs like updates and deletes to serialize on the
locks. The compaction will be done in units of smaller transactions, so the availability
of the object will not be impacted significantly.

2)第二步就是降低高水位,这个过程要在表上加X锁,会造成所有表上的DML阻塞。一般这个过程比较短,我们可以在做这个操作前,多执行几次阶段一的操作。这样能保证这个时间足够的小。
后记:大表即使第一个操作做了N遍,第二个操作依然会比较久,结合10046会发现,这个过程中以单块读的形式读了数据库绝大多数的块。而且降低高水位过程中会获得表上6类型的锁,因此会阻塞DML,因此SHRINK操作,也是个风险较大的操作
However during certain phases of segment shrink (when the HWM is adjusted), the segment
will have to be locked in exclusive mode.

由于这个过程中,行的rowid会变化,因此需要开启行移动alter table table_name enable row movement ;

建议对于大表,生产环境下,都采取两步操作:
1)alter table table_name shrink space compcat;-------------相当于只执行了阶段一,中间可以取消掉,下次重新来过,分多次进行,
2)alter table table_name shrink space;---------------------降低高水位,尽量放到空闲的时候做,这个时候不能取消,否则可能遭遇BUG或字典不一致。

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

请登录后发表评论 登录
全部评论
Oracle ACE组成员,DBGeeK用户组发起人。曾在DTCC、ORACLE技术嘉年华、Gdevops等公开场合做过数据库技术专题分享,2017年应Oracle邀请在世界最大的数据库会议OOW上做技术分享。组织翻译了《拨云见日,解密Oracle ASM内核》一书。

注册时间:2009-07-04

  • 博文量
    422
  • 访问量
    2315091