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