首页 > 数据库 > Oracle > 数据库 SQL执行时长
生产中,业务常常会反馈在历史中的某一个时间点业务慢,怀疑SQL执行慢,这时我们可以数据库中历史视图DBA_HIST_ACTIVE_SESS_HISTORY 来确认。下面我们介绍一下该SQL 涉及的视图数据来由依此理解后面的解释。
第一:DBA_HIST_ACTIVE_SESS_HISTORY 该视图数据来自于V$ACTIVE_SESSION_HISTORY,数据库会每10秒从该视图收集一次数据存放到DBA_HIST_ACTIVE_SESS_HISTORY视图中。
第二:V$ACTIVE_SESSION_HISTORY 它包含每秒生产一次的活动数据库会话快照,每秒是数据库默认值,由参数_ash_sampling_interval 设置,单位毫秒,默认 1000。如果数据库会话位于CPU上或正在等待不属于Idle等待类的事件,则该会话被认为是活动的。有关等待类的更多信息,请参阅V$EVENT_NAME视图。
查询SQL:
select a.snap_id,
a.sample_time,
a.session_id,
sql_id,
sql_exec_id,
sql_exec_start,
max(a.sample_time),
(max(to_date(to_char(a.sample_time,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')) -
min(to_date(to_char(a.sql_exec_start,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))) * 24 * 60 * 60
from dba_hist_active_sess_history a
where sql_id = '00yzsa601y94h'
and to_char(a.sample_time, 'yyyy-mm-dd hh24:mi:ss') between
'2022-08-01 00:50:00' and '2022-09-01 19:10:00'
group by a.snap_id,
a.sample_time,
a.session_id,
sql_id,
sql_exec_id,
sql_exec_start;
注意:
该SQL执行的SQL 时长会有一定的偏移,主要是我们根据采样时间来计算的,偏移量在0-10秒.
参考文档:

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26342786/viewspace-2980199/ ,如需转载,请注明出处,否则将追究法律责任。