我正在使用Oracle 11gr2数据库。有没有办法检查一个特定查询执行的次数以及当前日期或最近24小时执行的总运行时间是多少?它就像sql运行时的历史。请提供您的建议。
答案 0 :(得分:2)
select sql_text, sql_fulltext, executions, elapsed_time/1000000 seconds
from gv$sql
order by executions desc;
这将仅返回未超出共享池的查询,并且仅提供累计运行时间。但是,如果您只对最常见的查询感兴趣,那么它们最近可能会被使用,并且不会老化。
AWR报告或其中一个DBA_HIST_ *表也可能有所帮助。如果您有网格控件,则可以非常轻松地选择24小时制,并生成一个显示热门查询的报告。
<强>更新强>
我认为没有办法获得每个单独执行的统计数据。历史性能视图通过抽样工作,它们不捕获所有内容。实际上,这是用于性能调整的足够信息。如果某些事情经常发生不足以进行采样,则不值得调整。
AWR可用于查找每天的大致执行次数:
--Number of Executions today.
select
--Executions at last snap.
(
select executions_total
from dba_hist_sqlstat
where snap_id =
(
--Latest snapshot.
select max(snap_id) keep
(dense_rank last order by begin_interval_time) end_snap_id
from dba_hist_snapshot
)
and sql_id = '5ms6rbzdnq16t'
)
-
--Executions at beginning of day.
(
select executions_total
from dba_hist_sqlstat
where snap_id =
(
--Snapshot for beginning of the day.
--Assumes there are hourly snapshots that start on time.
select snap_id begin_snap_id
from dba_hist_snapshot
where trunc(begin_interval_time, 'hh') = trunc(sysdate)
)
and sql_id = '5ms6rbzdnq16t'
) executions_today
from dual;