【问题标题】:How to get a count of the number of times a sql statement has executed in X hours?如何获取一条sql语句在X小时内执行的次数?
【发布时间】:2019-10-03 19:19:05
【问题描述】:

我正在使用 oracle 数据库。我希望能够计算 SQL 语句在 X 小时内执行的次数。例如,在过去 5 小时内,Select * From ExampleTable 语句执行了多少次?

我尝试查看 V$SQL、V$SQLSTATS、V$SQLAREA,但它们只记录了一条语句的总执行次数。它们不存储个别处决发生的时间。是否有任何我错过的视图,或者其他可以跟踪每个单独的语句执行 + 时间戳的东西,以便我可以查询 X 小时前发生的情况?感谢您的帮助。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    Active Workload Repository 中的视图存储历史 SQL 执行信息,特别是视图 DBA_HIST_SQLSTAT

    视图并不完美;它包含top SQL 语句的摘要。这几乎是性能调优的完美信息——在实践中,采样会发现任何性能问题。但是,如果您正在寻找每个 SQL 执行的完美记录,据我所知,获取该信息的唯一方法是通过 tracing,它有缺陷且速度慢。

    希望这个查询足够好:

    select begin_interval_time, end_interval_time, executions_delta, dba_hist_sqlstat.*
    from dba_hist_sqlstat
    join dba_hist_snapshot
        on dba_hist_sqlstat.snap_id = dba_hist_snapshot.snap_id
        and dba_hist_sqlstat.instance_number = dba_hist_snapshot.instance_number
    order by begin_interval_time desc, sql_id;
    

    【讨论】:

    • 值得指出的是 AWR 不是免费的。虽然我们可以查询 AWR 表,但只有在我们的组织购买了 Oracle 数据库诊断包(企业版需要额外收费)的情况下,我们才获得许可
    【解决方案2】:

    很抱歉将其放在答案而不是评论中(我没有所需的声誉),但我认为您可能不走运。这是一个 AskTOM,问的问题基本相同:AskTOM。 Tom 说,除非您使用 ASH,否则数据库的设计目的并非如此。

    【讨论】:

      猜你喜欢
      • 2014-05-23
      • 2023-04-01
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      相关资源
      最近更新 更多