攻略1-13 检测行链接和行迁移

问题描述

在查询表中数据的时候遇到了性能问题,你想确认是不是由于行迁移或行链接导致的。

解决方案

下面是可以用来检测行迁移/行链接的选项:

 段顾问的输出; 
 ANALYZE TABLE ... INTO CHAINED_ROWS; 
 ANALYZE TABLE ... COMPUTE STATISTICS; 
 查询V$SYSSTAT视图。 
上面列表中的前两项已经在攻略1-12中进行了讨论。下面分别讨论后两个选项。

计算统计信息

验证行迁移/行链接的一种好方法就是使用ANALYZE TABLE...COMPUTE STATISTICS语句。为一张表运行这个语句,将会填充DBA_TABLES表的CHAINED_CNT列。例如:

enter image description here

CHAIN_CNT中包含表中所出现的行迁移和行链接的总和。如果行迁移/行链接的百分比超过15%,可能就会存在问题。

查询V$SYSSTAT

另一种用来确认是否存在行迁移问题的方法就是查询V$SYSSTAT视图。在启动数据库实例之后,每次读取行迁移/行链接的数据行时,统计信息中table fetch continued row的值就会增加。可以像下面这样来查看这个统计信息:

enter image description here

工作原理

检测行迁移或行链接的最好方法之一就是查看段顾问的输出。如果没有这个工具的使用许可,那么还有其他方法,例如使用ANALYZE TABLE语句或查询V$SYSSTAT视图。

如果想要分析某个架构下所有的表,可以使用下面的SQL脚本来生成一条SQL语句:

enter image description here

上面的脚本生成检测当前连接的用户拥有的所有表所需的SQL语句。如果有大表,要记住可能需要花一点时间来对它们进行分析。

“解决方案”部分所描述的第二种方法是查询V$SYSSTAT视图。这样可以对数据库有更动态的认识。例如,当检查具有行链接的总行数时,并不知道它们是否属于正在被查询的大表。查询V$SYSSTAT视图可以帮助解决这个问题,因为它衡量的是当前在数据库中正在处理的事务。

目录