WEB开发网
开发学院数据库Oracle Oracle中行迁移和行链接的清除及检测 阅读

Oracle中行迁移和行链接的清除及检测

 2007-05-06 12:05:55 来源:WEB开发网   
核心提示: 二、行迁移和行链接的检测通过前面的介绍我们知道,行链接主要是由于数据库的db_block_size不够大,Oracle中行迁移和行链接的清除及检测(5),对于一些大的字段没法在一个block中存储下,从而产生了行链接,可以具体查看某张表上有多少的行链接和行迁移,SELECT table_n

二、行迁移和行链接的检测

通过前面的介绍我们知道,行链接主要是由于数据库的db_block_size不够大,对于一些大的字段没法在一个block中存储下,从而产生了行链接。对于行链接我们除了增大db_block_size之外没有别的任何办法去避免,但是因为数据库建立后db_block_size是不可改变的(在9i之前),对于Oracle9i的数据库我们可以对不同的表空间指定不同的db_block_size,因此行链接的产生几乎是不可避免的,也没有太多可以调整的地方。行迁移则主要是由于更新表的时候,由于表的pctfree参数设置太小,导致block中没有足够的空间去容纳更新后的记录,从而产生了行迁移。对于行迁移来说就非常有调整的必要了,因为这个是可以调整和控制清除的。

如何检测数据库中存在有了行迁移和行链接呢?我们可以利用Oracle数据库自身提供的脚本utlchain.sql(在$ORACLE_HOME/rdbms/admin目录下)生成chained_rows表,然后利用ANALYZE TABLE table_name LIST CHAINED ROWS INTO chained_rows命令逐个分析表,将分析的结果存入chained_rows表中。从utlchain.sql脚本中我们看到chained_rows的建表脚本,对于分区表,cluster表都是适用的。然后可以使用拼凑语句的办法生成分析所需要的表的脚本,并执行脚本将具体的分析数据放入Chained_rows表中,例如下面是分析一个用户下所有表的脚本:

SPOOL list_migation_rows.sql
SET ECHO OFF
SET HEADING OFF
SELECT 'ANALYZE TABLE ' || table_name ||
' LIST CHAINED ROWS INTO chained_rows;' FROM user_tables;
SPOOL OFF

然后查询chained_rows表,可以具体查看某张表上有多少的行链接和行迁移。

SELECT table_name, count(*) from chained_rows GROUP BY table_name;

当然,也可以查询v$sysstat视图中的’table fetch continued row’列得到当前的行链接和行迁移数量。

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:Oracle 中行 迁移

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接