怎么检查没有执行查询?

时间:2013-12-26 16:17:04

标签: performance oracle oracle11g monitoring database-administration

我正在使用Oracle 11gr2数据库。有没有办法检查一个特定查询执行的次数以及当前日期或最近24小时执行的总运行时间是多少?它就像sql运行时的历史。请提供您的建议。

1 个答案:

答案 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;