我需要报告某一模块在一天之内执行的所有查询的总时间。
-- 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;
但是我向自己提出以下要求:
具有v $ sql所有查询,并且持续多长时间?刷新共享池后,它至少为空
是否有更好的方法来计算特定时间范围内查询消耗的总时间?
在FIRST_LOAD_TIME是查找正确日期的正确字段。根据Oracle的说法,这是父级创建时间的时间戳-应该正确吗?
感谢您加入讨论!
答案 0 :(得分:0)
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中的行在完成后便消失了。CREATE TABLE
设置MODULE
并获得了SQL调整许可,则只需使用自动工作负载管理(AWR)框架即可;它在可以生成的报告中包含MODULE信息,并为您提供执行次数,以及许多其他信息。DBMS_APPLICATION_INFO.SET_MODULE(mod_name, action_name);
可能是几天前,也可能是一会儿。我会远离V $ SQL -它对于您想做的事情来说太动态了;并使用FIRST_LOAD_TIME
设置模块名称,并可能为代码的不同部分设置不同的操作名称。