攻略1-9 显示自动段顾问建议

问题描述

你有一个查询,访问某张表中数据的性能较差。通过进一步研究,你发现这张表中只有很少的几行数据。你感到奇怪:为什么数据行这么少,而这个查询却要花费这么长的时间呢?你想要检查段顾问(Segment Advisor)的输出,看看是否有与存储空间相关的建议,能够帮助你提高这种情况下的查询性能。

解决方案

使用段顾问来显示相应表的信息,这些表之前分配过空间(曾经使用过),但现在这些空间变成了空的(由于大量的数据行被删除了)。具有大量未使用空间的表将会使全表扫描查询的执行效率变得很低。这是因为Oracle会扫描位于高水位线之下的所有数据块,而不管这些数据块中是否有数据。

本解决方案的重点是通过DBMS_SPACE PL/SQL包来访问段顾问的建议。这个包获取由段顾问生成的相关段信息,这些段适合进行收缩、移动或压缩。使用DBMS_SPACE包(获得段顾问建议)的一种简单而有效的方法是通过SQL查询来进行,例如:

enter image description here enter image description here

工作原理

在Oracle Database 10g R2及其之后的版本中,Oracle自动调度并运行一个段顾问作业。这个作业分析数据库中的段,并将分析结果存放在内部表中。段顾问的输出包括分析结果(需要解决的问题)以及建议(解决问题需要执行的操作)。段顾问的分析结果包括下面这些类型:

 适合进行收缩操作的段; 
 具有显著行链接的段; 
 可能会从OLTP(Online Transaction Processing,联机事务处理)压缩中获益的段。 
查看段顾问的分析结果和建议时,理解这个工具的一些方面是很重要的。首先,段顾问通过一个自动调度的DBMS_SCHEDULER作业来定期计算建议。可以查询DBA_AUTO_ SEGADV_SUMMARY视图,查看自动作业最后一次运行的时间:

你可以将END_TIME日期与当前日期进行比较,从而确定段顾问是否是定期运行的。

注意 除了自动生成段建议之外,还可以选择手工执行段顾问,来生成面向具体表空间、表和索引的建议(详见攻略1-10)。

执行段顾问时,它使用 AWR(Automatic Workload Repository,自动工作负载信息库)作为信息源进行分析。例如,段顾问检查AWR中的使用率和增长统计信息来生成段建议。运行段顾问时,它就会生成建议并将输出保存在数据库内部表中。这些建议和推荐方案可以通过下面这些数据字典视图来查看:

 DBA_ADVISOR_EXECUTIONS 
 DBA_ADVISOR_FINDINGS 
 DBA_ADVISOR_OBJECTS 
注意 DBA_ADVSIOR_*视图是诊断包的一部分,需要Oracle企业版中的单独许可。

有三种不同的工具可以用来获取段顾问的输出:

 执行DBMS_SPACE.ASA_RECOMMENDATIONS; 
 手工查询DBA_ADVISOR_*视图; 
 查看企业管理器(Enterprise Manager)的图形界面。 
“解决方案”一节阐述了如何使用DBMS_SPACE.ASA_RECOMMENDATIONS存储过程来获取段顾问建议。ASA_RECOMMENDATIONS输出可以通过三个输入参数来修改,具体描述见表1-6。例如,你可以让这个存储过程显示手工执行段顾问时所生成的信息。

enter image description here

注意 可以在企业管理器中显示段顾问建议。要查看段建议,选择Performance标签页,定位到Advisors Home页面,再导航到Segment Advisor页面。在这个页面中可以生成段顾问报告。

目录