一天中所有查询的Oracle总(经过)时间

时间:2019-02-21 18:52:26

标签: sql oracle monitoring

我需要报告某一模块在一天之内执行的所有查询的总时间。

    -- sum over all queries executed the last 24 hours
   select
         u.username,
         sum(round(v.ELAPSED_TIME / 3600000000 * 60,2)) ELAPSED_TIME_MINUTES,
         sum(round(v.ELAPSED_TIME / 3600000000,2)) ELAPSED_TIME_HOURS,
         v.module
      from gv$sql v
      left join dba_users u
    on v.parsing_user_id = u.user_id
       where u.username like '%XYZ' and module = 'WEBSERVER'
  and to_date(v.FIRST_LOAD_TIME,'yyyy-mm-dd hh24:mi:ss') > (trunc(sysdate,'DD') - interval '1' day)
  group by username,module;

但是我向自己提出以下要求:

  1. 具有v $ sql所有查询,并且持续多长时间?刷新共享池后,它至少为空

  2. 是否有更好的方法来计算特定时间范围内查询消耗的总时间?

  3. 在FIRST_LOAD_TIME是查找正确日期的正确字段。根据Oracle的说法,这是父级创建时间的时间戳-应该正确吗?

感谢您加入讨论!

1 个答案:

答案 0 :(得分:0)

  1. 由于提示或由于诸如Customer From date To date Results 0 A 1/10/2017 2/9/2017 NaN 1 A NaN NaN Missing 2 A 3/10/2017 4/9/2017 NaN 3 A NaN NaN Not Missing 4 A 4/9/2017 5/9/2017 NaN 5 B 2/10/2017 3/9/2017 NaN 6 B NaN NaN Not Missing 7 B 3/9/2017 4/9/2017 NaN 之类的sql语句的性质,某些语句在V $ SQL中的行在完成后便消失了。
  2. 如果您通过CREATE TABLE设置MODULE并获得了SQL调整许可,则只需使用自动工作负载管理(AWR)框架即可;它在可以生成的报告中包含MODULE信息,并为您提供执行次数,以及许多其他信息。
  3. DBMS_APPLICATION_INFO.SET_MODULE(mod_name, action_name);可能是几天前,也可能是一会儿。

我会远离V $ SQL -它对于您想做的事情来说太动态了;并使用FIRST_LOAD_TIME设置模块名称,并可能为代码的不同部分设置不同的操作名称。