分类: Oracle
2008-04-22 19:32:13
2)准备收集SQL
接下来,我创建了几条SQL语句使用不同的执行计划访问SH.SALES_AGENTS表,注意我提供了几个不同的访问路径情景:有时候,我允许基于成本的优化器使用所有可用的索引选择最佳执行计划,另外的情况下,我使用不合适的优化提示完全覆盖基于成本的优化器,列表1.2展示了这些通过LDGN用户执行的SQL语句,列表1.3展示了我如何启动捕获这些简单的SQL语句进入一个叫做STS_SPA_100的SQL调整集(STS)。
3)创建一个“之前”的性能基线
因为我之前的数据库映像现在已经准备好可以开始测试了,我创建一个SQL性能分析任务并让Oracle 11g决定任务的名字(TASK_69),如列表1.4展示的那样,这个新任务使用STS_SPA_100 SQL调整集作为SPA调整会话的输入,然后,我用存储过程DBMS_SQLPA.EXECUTE_ANALYSIS_TASK创建超前的性能基线映像。
4)修改数据库环境
一旦基线被成功创建,我将模拟最简单的修改情景,如列表1.5中例子,我移除了SH.SALES_AGENTS表的两个原始索引,然后我刷新了该表的统计数值。
5)创建一个“之后”的性能基线
要确定对这些原始索引改动的后果,相对与相同的工作量,我再次执行DBMS_SQLPA.EXECUTE_ANALYSIS_TASK存储过程,测试相同SQL调整集的执行,列表1.6展示了如何创建后面的性能基线。
6)比较“之前”的和“之后”的基线
最后,我执行列表1.7中的代码通过比较“之前”和“之后”的测试用例的结果判断修改的影响,然后,我通过象列表1.8中举例的那样调用DBMS_SQLPA.REPORT_ANALYSIS_TASK存储过程生成一个这些不同之处的简单的摘要报告。
报告结果的文本格式()(参考附件“报告1.txt”),报告清晰地显示,移除的索引对原始的8条SQL语句有很明显的影响:
◆有3条语句完全没有受到影响,即使移除了两条索引后也没有受到影响
◆意料之中的是,至少有1条SQL语句在索引移除后产生了消极的影响
◆但是,有4条SQL语句在移除2条索引后受到了明显的影响。这真的很有意义,因为这些语句是通过优化器提示强制使用这些索引的,这有助于提升它们原始的低劣的性能。
下一步
在本系列的下一篇文章中,我将讲述SQL性能分析器如何分析更复杂的Oracle数据库和环境的改变,包括一个说明如何分析一个经历从Oracle 10gR2环境转移到Oracle 11g环境的SQL工作负载的情景,我也将广泛地探讨如何使用Oracle数据库11g企业管理器(EM)控制面板提供的SQL性能分析器图形用户接口更容易地创建、执行和导航。