Oracle 11g:SQL性能分析器(一)(3)

日期: 2009-03-26 作者:Jim Czuprynski翻译:黄永兵 来源:TechTarget中国 英文

  1)准备模拟

  我创建了一个新表SH.SALES_AGENTS,并装入了一套大约420,000行的样例数据,然后,我在该表上创建五个索引:一个在主键SALESPERSON_ID上的唯一性(UNIQUE)索引和四个附加的索引(典型地用于决策支持系统DSS或联机事务处理应用程序OLTP以加快减速速度),列表1.1包括了我创建表、索引和更新它们的基于成本的优化器统计的DDL(数据描述语言)语句,LoadSalesAgents.sql包括了DML语句。

  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存储过程生成一个这些不同之处的简单的摘要报告。

  报告结果的文本格式

http://www.databasejournal.com/img/2007/10/JSC_Performance_Advisor_Report_1.html)(参考附件“报告1.txt”),报告清晰地显示,移除的索引对原始的8条SQL语句有很明显的影响:

  ◆有3条语句完全没有受到影响,即使移除了两条索引后也没有受到影响 

  ◆意料之中的是,至少有1条SQL语句在索引移除后产生了消极的影响

  ◆但是,有4条SQL语句在移除2条索引后受到了明显的影响。这真的很有意义,因为这些语句是通过优化器提示强制使用这些索引的,这有助于提升它们原始的低劣的性能。

  下一步

  在本系列的下一篇文章中,我将讲述SQL性能分析器如何分析更复杂的Oracle数据库和环境的改变,包括一个说明如何分析一个经历从Oracle 10gR2环境转移到Oracle 11g环境的SQL工作负载的情景,我也将广泛地探讨如何使用Oracle数据库11g企业管理器(EM)控制面板提供的SQL性能分析器图形用户接口更容易地创建、执行和导航。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐