【性能优化】消除行链接和行迁移的思路和方法

关于行链接和行迁移的概念请参考文章《【概念】行链接和行迁移的概念、模拟及甄别》
(http://space.itpub.net/519536/viewspace-624408)。


众所周知,行链接和行迁移会导致系统的查询效率降低,因为在这种情况下查询需要扫描更多的数据块才能得到所需的信息。本文尝试给出消除行链接和行迁移的思路和方法。

1.消除行链接和行迁移思路
1)针对发生行链接和行迁移的数据行进行重新整理;

2)将数据迁移到大尺寸数据块表空间中存放。

2.消除行链接和行迁移方法
假设T表出现行链接、行迁移问题。

1)针对发生行链接和行迁移的数据行进行重新整理的方法
(1)使用CTAS(Create Table As Select)方法将出现行链接和行迁移的数据汇总在表T_Temp中。具体命令参考如下:
SQL> create table T_Temp as select * from T where rowid in (select head_rowid from chained_rows where table_name='T');

(2)删除T表中发生行链接行迁移的数据
SQL> delete from T where rowid in (select head_rowid from chained_rows where table_name='T');

(3)将表T_Temp中存放的数据插回到T表
SQL> insert into T select * from T_Temp;

(4)删除表T_Temp
SQL> drop table T_Temp purge;

通过这么一系列的维护,行链接和行迁移现象将会明显减少或消失(如果不存在一个数据块存放不下一行数据的情况)。

2)将数据迁移到大尺寸数据块表空间中存放
如果存在一个数据块存放不下一行数据的情况,我们需要通过创建大尺寸数据块表空间,然后将表移动到新表空间上存放的方法来解决。
(1)创建大尺寸数据块表空间
有关大尺寸数据块表空间的创建请参见文章《【TABLESPACE】创建非标准块大小(标准块8K)表空间》(http://space.itpub.net/519536/viewspace-668281)
SQL> create tablespace TBS_16K datafile '/u01/app/oracle/oradata/ora10g/DATA01_01.dbf' size 256M uniform. size 4M blocksize 16K;

(2)将表T移动到新建的表空间上
SQL> alter table T move TBS_16K;

3.小结
在OLTP系统中出现行链接和行迁移的可能性比较高,我们可以使用文中介绍的方法定期对这些数据进行调整,防止系统出现性能问题。

Good luck.

secooler
11.04.28

-- The End --

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

转载于:http://blog.itpub.net/519536/viewspace-694047/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值