• 博客访问: 7792387
  • 博文数量: 798
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-16 22:27
  • 认证徽章:
个人简介

Oracle ACE 总监,OCM联盟(ocmu.org)创始人,恩墨学院(enmoedu.com)创始人,ITPUB Oracle专题深入讨论版版主,资深Oracle数据库专家,北京大学理学硕士,获Oracle OCM 10g 11g认证,ACOUG核心成员,DATAGURU专家团成员,Blogger。Good luck.

文章分类

全部博文(798)

文章存档

2013年(1)

2012年(18)

2011年(156)

2010年(302)

2009年(309)

2008年(7)

2007年(5)

分类: Linux操作系统

2011-04-28 23:56:56

关于行链接和行迁移的概念请参考文章《【概念】行链接和行迁移的概念、模拟及甄别》
(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 --

阅读(5527) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册