讲解Row Movement对系统的影响(三)

【源于网络】
 
同样,我们可以看到在Shrink后,ROWID也变化了。从对其过程的Trace来看,Shrink对数据的改变不是通过SQL实现的,而是通过更底层的函数来实现的。

  从以上分析来看,在执行上面2种操作操作后,其最大影响就是数据的ROWID会发生变化。因此,他们对我们系统的影响就仅限于那些依赖于ROWID编写的应用。例如,一个程序需要对大量数据进行处理,为了提高效率和控制进度,我们的代码会先将需要处理的数据记录的ROWID取出放入临时表中,然后再根据ROWID对数据进行分批进行处理。当ROWID被取出后,如果对表进行了上述操作,就可能会导致后依赖ROWID进行的操作发生错误。但是,这两种操作都属于维护性操作,第一种操作发生的机会非常少,从整体看,我们基本可以忽视这一操作对应用的影响;第二种操作也很少发生,并且可以在应用offline的时间进行操作,因此它的影响也是有限的。

  更新Partition Key

  在更新记录中的Partition Key时,可能会导致该记录超出当前所在分区的范围,需要将其转移到其他对应分区上,因此要求开启ROW MOVEMENT。

  SQL代码


  SQL> drop table test_move;
  Table dropped.
  SQL> create table test_move
  2 partition by list (owner)
  3 (partition p1 values ('SYS'),
  4 partition p2 values ('DEMO'),
  5 partition p3 values ('SYSTEM'),
  6 partition def values (default))
  7 as select * from dba_tables;
  Table created.
  SQL> update test_move set wner='SYS' where wner='DEMO' and table_name='T_TEST';
  update test_move set wner='SYS' where wner='DEMO' and table_name='T_TEST'
  *
  ERROR at line 1:
  ORA-14402: updating partition key column would cause a partition change
  SQL> alter table test_move enable row movement;
  Table altered.
  SQL> update test_move set wner='SYS' where wner='DEMO' and table_name='T_TEST';
  1 row updated.

  这一操作产生影响的特殊之处在于这是个DML操作,是和online transaction密切相关。对于这样一个UPDATE,实际上分为3步:先从原有分区将数据删除;将原数据转移到新分区上;更新数据。其影响就在于以下几个方面:

  一个UPDATE被分解为DELET、INSERT、UPDATE三个操作,增加了性能负担。其中,DELETE的查询条件与原UPDATE的查询条件相同,新的UPDATE的查询条件是基于INSERT生成的新的ROWID;

  相应的Redo Log、Undo Log会增加;

  如果Update语句还涉及到了Local Index的字段的话,新、旧2个分区上的Local Index都要被更新。

  结论

  目前,ROW Movement真正会其作用(ROWID变化)只是在上述3种情况下,因此,需要分析其对系统会产生多大影响,就要分析上述三种操作在你的系统中出现的频率、以及是否有应用程序依赖与ROWID实现。对于前面两种,之前说过,它们发生的概率并不高,我个人认为基本上可以忽略它们对系统的影响。而对于最后一种,需要从应用角度进行分析——Partition Key被更新的频率有多高?如果可能,最好实施一次等量负载下更细Partition Key的压力测试,通过对比分区和非分区下其产生的性能统计数据做比较,其带来的性能负载及Waits量与分区所获取的查询性能的提高相比,哪一种方式更有助于系统和应用的性能提高。

  此外,有一点希望不要产生误解,开启ROW Movement并不会导致发生Row Migration时修改记录的Rowid。

  还有一点,Row Movement会和域索引(Domain Index)产生冲突:如果表上定义了域索引,开启Row Movement就会失败;反之亦然。

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

转载于:http://blog.itpub.net/22308399/viewspace-750407/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值