主动跟踪oracle查询性能

时间:2013-04-17 23:09:44

标签: performance oracle oracle10g query-optimization

背景

我们有一个数据库环境,其中视图调用视图调用视图...逻辑变得复杂,现在对底层视图的更改会对客户端应用程序调用的顶视图产生重大影响。

现在,当我们记录所有逻辑并弄清楚如何解除所有开发继续进行并且性能继续降低时。

目前,我会手动运行客户端查询的解释计划,并深入调整它。这是一个缓慢而乏味的过程,可能无法检查多年的变化。

问题:

我想生成一个列出SQL ID的报告,并列出估计行与实际行/缓冲区中的变化/读数变化之间的实际时间/差异的变化,与上个月计算的平均值相比较。

我通常会手动运行以下脚本,并根据当天的响应进行检查。

ALTER SESSION SET statistics_level=all;
set linesize 256;
set pagesize 0;
set serveroutput off;

-- QUERY

SELECT
    *
FROM
    table (DBMS_XPLAN.display_cursor (NULL, NULL, 'ALLSTATS LAST'));

我要做的是查看自动化解释计划查询并将统计信息插入表中。从那里我可以运行回归报告来检测性能的变化,然后可以提醒开发人员。

我认为这样的事情很普遍而不必诉诸于OEM。我找不到任何东西,所以我想知道是否有更常见的方法呢?

3 个答案:

答案 0 :(得分:4)

Oracle通过自动工作负载存储库为此提供了功能。 http://docs.oracle.com/cd/E11882_01/server.112/e16638/autostat.htm

我认为,这是企业版之上的额外许可证。它应该可以在非生产环境中使用而无需额外成本,但请咨询您的Oracle销售代表。

答案 1 :(得分:2)

听起来你正在重新发明STATSPACK。 Oracle仍然将它包含在他们的数据库中,但不再记录它,大概是因为它是免费的,与AWR和ASH不同。您仍然可以在the 9i manual中找到该文档。

答案 2 :(得分:0)

您正在寻找活动会话历史记录(ASH)

select * from v$active_session_history where sql_id = :yoursqlid