一天所有查询的Oracle总计(已用)时间

问题描述 投票:0回答:1

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

    -- 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,它是父创建时间的时间戳 - 应该是正确的吗?

感谢您参加讨论!

sql oracle monitoring
1个回答
0
投票
  1. 某些语句的V $ SQL中的行在完成后会消失,无论是由于提示,还是由于sql语句的性质,例如CREATE TABLE消失。
  2. 如果您通过MODULE设置DBMS_APPLICATION_INFO.SET_MODULE(mod_name, action_name);并获得许可的SQL调优,那么只需使用自动工作负载管理(AWR)框架;它包括它可以生成的报告中的MODULE信息,并为您提供执行次数以及许多其他信息。
  3. FIRST_LOAD_TIME可能是几天前,或者是几天前。

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.