在我们的测试台中,许多测试套件将连续运行(无人值守),生成报告供以后使用 . 我希望在这些报告中包含可供进一步调查的候选查询,以及证明其被列入该列表的数据 . 我们应该能够将以这种方式识别的任何查询与将其暴露为关注的测试套件相关联 .
当我们使用SQL Server时,这是相对简单的 - 在套件开始之前调用DBCC FREEPROCCACHE清除所有计数器,然后在测试结束时我们对sys.dm_exec_query_stats运行查询,这使我们可以访问执行计数和min / max /每个缓存查询计划的总时间,可以使用钩子检索参数化的SQL语句(我们在mssql实例中使用FORCED参数化)和查询计划 .
参考:http://msdn.microsoft.com/en-us/library/ms189741%28SQL.90%29.aspx
我的问题:当我的目标应用程序连接到Oracle 11g时,如何实现此近似值?到目前为止,我的阅读表明,我所追求的一切都可以通过AWR获得,并且应该可以直接访问支持视图,但我无法自己关闭这个圆圈 .
4 回答
为什么需要直接访问支持视图?在我看来,最简单的解决方案是
每个测试套件通过显式生成AWR快照来开始和结束,因此它知道开始和结束快照ID,因此您可以单独为每个套件生成AWR报告 .
您为每个测试套件运行AWR报告
您查看AWR报告,特别是查看各种Top SQL部分
绝对可以直接从底层视图中获取所有信息,但如果您不需要这样做,那显然更容易 .
为了理智,我应该指出,我假设您已获得使用AWR的许可 . 从技术上讲,即使查询AWR视图,也需要获得Performance and Tuning Pack的许可 . 如果您想直接点击视图而不是因为许可问题而生成完整的AWR报告,那么您不会通过点击视图来节省任何许可证的麻烦 .
相当于DBCC FREEPROCCACHE的Oracle
最接近SQL Server计数器的是V$SYSSTAT和V$SYSTEM_EVENT . 但是,Oracle在会话级别实际上也会在v $ SESSION_WAIT,V $ SESSION_WAIT_CLASS和V $ SESSION_EVENT中跟踪这些内容,因此您不需要诊断/调整包许可证来访问它们 .
它们不会降低到SQL级别 . 这在V $ SQL中可用,但不是特定于该会话 . 您可以使用session level tracing来跟踪可能导致问题的各个SQL
贾斯汀的答案有正确的轮廓,但我需要更多有关实施的细节 .
从dual中选择dbms_workload_repository.create_snapshot()作为snap_id
从v $ database d,v $ instance i中选择d.DBID,i.instance_number为inst_num
从表中选择输出(dbms_workload_repository.awr_report_html(1043611354,1,5539,5544,0))
Documentation of these methods is available online