【问题标题】:Automating problem query identification in Oracle 11g在 Oracle 11g 中自动识别问题查询
【发布时间】:2010-12-01 06:01:22
【问题描述】:

在我们的测试台中,许多测试套件将连续运行(无人值守),生成报告以供日后使用。我想在那些报告中包含有待进一步调查的查询,以及证明它们包含在该列表中的数据。我们应该能够将任何以这种方式识别的查询与将其暴露为问题的测试套件相关联。

当我们使用 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 获得,并且应该可以直接访问支持视图,但我无法自己关闭圆圈。

【问题讨论】:

    标签: sql oracle plsql oracle11g


    【解决方案1】:

    为什么需要直接访问支持视图?在我看来,最简单的解决方案是

    • 每个测试套件都通过显式生成 AWR 快照开始和结束,以便它知道开始和结束快照 ID,以便您可以单独为每个套件生成 AWR 报告。
    • 您为每个测试套件运行 AWR 报告
    • 您查看 AWR 报告,特别关注各个 Top SQL 部分

    绝对有可能直接从底层视图中获取所有信息,但如果您不需要这样做,那显然更容易。

    出于理智,我应该指出,我假设您已获得使用 AWR 的许可。从技术上讲,即使查询 AWR 视图也需要您获得 Performance and Tuning Pack 的许可。如果您想直接点击视图而不是因为许可问题而生成完整的 AWR 报告,那么点击视图并不会为自己省去任何许可问题。

    【讨论】:

    • +1 AWR 报告可以使用安装中的标准脚本生成(文本或 html),并且可以很好地按各种资源类别对 SQL 进行排名。
    【解决方案2】:

    DBCC FREEPROCCACHE 的 Oracle 等价物是

    SQL> alter system flush shared_pool;
    

    【讨论】:

    • 它不会重置计数器(例如 V$SYSSTAT 和 V$SYSTEM_EVENT)
    【解决方案3】:

    最接近 SQL Server 计数器的是 V$SYSSTATV$SYSTEM_EVENT。 然而,Oracle 实际上也在会话级别在 v$SESSION_WAIT、V$SESSION_WAIT_CLASS 和 V$SESSION_EVENT 中跟踪这些,因此您无需在系统级别重置它们。 而且您不需要诊断/调整包许可证即可访问它们。

    它们不会下降到 SQL 级别。这在 V$SQL 中可用,但不是特定于该会话。您可以使用session level tracing 来追踪可能导致问题的个别 SQL

    【讨论】:

      【解决方案4】:

      贾斯汀的回答有正确的大纲,但我需要有关实施的更多细节。

      • 每个测试套件都通过显式生成 AWR 快照开始和结束,以便它知道开始和结束快照 ID,以便您可以单独为每个套件生成 AWR 报告。
      • 您为每个测试套件运行 AWR 报告
      • 您查看 AWR 报告,特别关注各个 Top SQL 部分
      • 我通过调用 dbms_workload_repository.create_snapshot 显式生成快照,结果被保存以备后用。

        从 dual 中选择 dbms_workload_repository.create_snapshot() 作为 snap_id

      • 为了获取报告,我需要数据库 ID 和实例编号。这些很容易从 v$database 和 v$instance 获得。

        select d.DBID, i.instance_number as inst_num from v$database d, 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))

      • 这个结果很容易写入一个文件,该文件与测试的其他工件组合在一起。

      Documentation of these methods is available online

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-01
        • 1970-01-01
        • 2010-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多