Oracle11g中,真实应用测试选项(the Real Application Testing Option)提供了一个有用的特点,叫SQL性能分析器(SQL Performance Analyzer,SQLPA,SPA)。系统包DBMS_SQLPA让你可以注册和比较SQL调优集(STS)中的SQL语句执行的统计信息。通过SQL性能分析器,可比较数据库变化前后SQL语句的执行情况。下面将通过简单例子说明该Oracle 11g 新特点。
1. 创建样例表和数据
为了稍后的说明,首先,需创建一张表和往表中加一些数据,脚本如下:
2. 运行SQL语句并获取执行计划
登录SQL*Plus并运行SQL语句:
其执行计划如下,记住其SQL_ID并将会添加到后面部分SQL调优集中的查询语句中:
3. 捕获SQL调优集查询
一旦SQL语句位于共享池中,就可以创建一个新的SQL调优集,并向其中增加SQL语句:
3. 改变数据库前,生成和存储该SQL语句执行统计信息
该步骤可能会花费一些时间,因为要运行STS查询和存储其执行统计信息。按顺序执行如下步骤:
1) 创建一个参考STS的SQLPA分析任务
7. 比较因数据库改变而发生的执行改变
需再次运行分析任务,这次分析器将比较和存储比较结果:
建议SECTION参数置为SUMMARY或ALL,而不非DBMS_SQLPA文档中说的置为SECTION_ALL那样。
可通过SQL*Plus(文本输出)或浏览器(HTML输出)浏览生成的报告结果:
8. 另一个显示比较结果的方法:
除了打印报告,还可从下面视图中查询报告:
Ø DBA_ADVISOR_FINDINGS
Ø DBA_ADVISOR_SQLPLANS
Ø DBA_ADVISOR_SQLSTATS
9. 清除执行统计信息、分析任务及相关表
1) 重置任务结果:
3) 此外,还可以:
Ø 用过程cancel_analysis_task 取消正运行的分析任务。
Ø 用过程interrupt_analysis_task暂停运行的分析任务。
Ø 用过程resume_analysis_task恢复被暂停的分析任务。
Ø 清除相关表和索引:
drop table gark cascade constraints purge;
10. 总结
针对SQLPA做如下总结:
Ø 可轻松从AWR中捕获STS中SQL语句。
Ø 不必重建测试系统(仅INSERT/UPDATE/DELETE语句的SELECT部分被执行)。
Ø STS中SQL语句仅是真实应用负载的一个样例。
具体请参考:
Ø Oracle 11gPerformance Tuning Guide – 23.SQL Performance Analyzer
Ø Oracle 11g PL/SQLTypes and Packages Reference – DBMS_SQLPA
Oracle11g Reference