Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103753852
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-22 19:32:13

作者: Jim Czuprynski/黄永兵 译 出处:51CTO.com 
 
 
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存储过程生成一个这些不同之处的简单的摘要报告。

报告结果的文本格式()(参考附件“报告1.txt”),报告清晰地显示,移除的索引对原始的8条SQL语句有很明显的影响:

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

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

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

下一步

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

阅读(340) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~