在我们的测试平台中,许多测试套件将连续运行(无人值守),生成报告供以后使用。我希望在这些报告中包含可供进一步调查的候选查询,以及证明其被列入该列表的数据。我们应该能够将以这种方式识别的任何查询与将其暴露为关注点的测试套件相关联。
当我们使用SQL Server时,这是相对简单的 - 在套件开始之前调用DBCC FREEPROCCACHE清除所有计数器,然后在测试结束时我们对sys.dm_exec_query_stats运行查询,这使我们可以访问执行每个缓存查询计划的计数和最小/最大/总时间,可以使用钩子检索参数化的SQL语句(我们在mssql实例中使用FORCED参数化)和查询计划。
参考:http://msdn.microsoft.com/en-us/library/ms189741%28SQL.90%29.aspx
我的问题:当我的目标应用程序连接到Oracle 11g时,如何实现此近似值?到目前为止,我的阅读表明,我所追求的一切都可以通过AWR获得,而且应该可以直接访问支持视图,但我无法自己关闭这个圈子。
答案 0 :(得分:1)
为什么需要直接访问支持视图?在我看来,最简单的解决方案是
绝对可以直接从底层视图中获取所有信息,但如果您不需要这样做,那显然更容易。
为了理智,我应该指出,我假设您已获得使用AWR的许可。从技术上讲,即使查询AWR视图,也需要获得Performance and Tuning Pack的许可。如果您想直接点击视图而不是因为许可问题而生成完整的AWR报告,那么您不会通过点击视图来节省任何许可证的麻烦。
答案 1 :(得分:0)
DBCC FREEPROCCACHE的Oracle等价物是
SQL> alter system flush shared_pool;
答案 2 :(得分:0)
最接近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
答案 3 :(得分:0)
Justin的回答有正确的大纲,但我需要有关实施的更多细节。
- 每个测试套件的开始和结束都是通过显式生成AWR快照,因此它知道开始和结束的快照ID,因此您可以单独为每个套件生成AWR报告。
- 您为每个测试套件运行AWR报告
- 您查看AWR报告,特别是查看各种Top SQL部分
我通过调用dbms_workload_repository.create_snapshot显式生成快照,结果将保存起来以供日后使用。
选择dbms_workload_repository.create_snapshot()作为双重的snap_id
为了获取报告,我需要数据库ID和实例编号。这些很容易从v $ database和v $ instance。
获得从v $ database d中选择d.DBID,i.instance_number为inst_num,v $ instance i
报告以文本(dbms_workload_repository.awr_report_text)或html(dbms_workload_repository.awr_report_html)的形式提供。两种情况下的参数都相同,包括选项标志,其中包含来自自动诊断数据库监视器(ADDM)的信息。对我来说,我可以利用ADDM结果并不是很明显,所以我将其关闭。返回值是varchar的列,因此函数调用被包装
从表中选择输出(dbms_workload_repository.awr_report_html(1043611354,1,5539,5544,0))
此结果很容易写入文件,该文件与测试的其他工件组合在一起。