【问题标题】:How to log the slow queries in Oracle如何在 Oracle 中记录慢查询
【发布时间】:2011-04-28 13:56:45
【问题描述】:

我必须记录慢查询,比如说运行时间超过 3 毫秒的查询 应该被记录 大多数情况下,这些查询是 SELECT 如何将它们登录到 Oracle 中?

【问题讨论】:

  • 3 毫秒?哇,我会记录我所有的查询!

标签: performance oracle10g


【解决方案1】:

如果您使用AWR,这将从 ASH 记录下来,您只需使用 OEM 或手写 SQL 将其挖掘出来。

3ms 确实很快,5-20ms 的响应时间在现代硬件上的 Oracle 中很好,考虑到所有因素。

【讨论】:

    【解决方案2】:

    在应用程序代码中,您可以执行以下操作:

    v_start_time := dbms_utility.get_time();
    -- Your query here
    -- ...
    v_end_time := dbms_utility.get_time();
    if v_end_time - v_start_time > v_max_time then
       insert into log_table ...;
    end if;
    

    dbms_utility.get_time 以 1/100 秒为单位返回时间 - 因此您不能将其用于 3ms 精度。您也许可以改用 SYSTIMESTAMP。

    实际上,我不会记录任何花费不到半秒的查询,您会记录几乎所有内容。

    【讨论】:

      【解决方案3】:

      如果您想记录慢速查询,那么 Tony 给出的解决方案是一个不错的解决方案。 但是如果你不能修改你的应用程序的源代码,你可以考虑安装一个 sql spy。我从来没有做过,但很容易做到。请注意,这会降低您的应用程序的速度:如果您正在对生产服务器进行故障排除,那么这不是一个好的解决方案。

      恕我直言,最好的解决方案不是记录慢速查询,而是找到它们(区别很细微...... :))。 Oracle 提供了大量工具来查找此类信息:

      • AWR 报告是我的首选工具。你会发现一段名为“SQL order by Elapsed Time”的段落,基本上就是你正在看的内容
      • gridcontrol 也给你这个信息,但我不太了解这个工具。它比 AWR 报告更易于使用
      • 如果您无法使用这些工具之一,您可以尝试简单地启动其他 stackoverflow 帖子中给出的 SQL: Top 5 time-consuming SQL queries in Oracle

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-09
        • 1970-01-01
        • 2013-01-22
        • 1970-01-01
        • 1970-01-01
        • 2016-07-18
        • 1970-01-01
        相关资源
        最近更新 更多