在Oracle中,可以通过以下几种方式根据SQL_ID查询每次执行的运行时间:
使用v$sql视图查询历史执行时间:
SELECT sql_id, sql_text, executions,
ROUND(elapsed_time/1000000,2) total_seconds,
ROUND(elapsed_time/1000000/executions,2) avg_seconds
FROM v$sql
WHERE sql_id = 'your_sql_id';
查询dba_hist_sqlstat获取更详细的历史执行信息:
SELECT a.sql_text, b.etime 执行耗时, c.SAMPLE_TIME 执行时间
FROM dba_hist_sqltext a,
(SELECT sql_id, ELAPSED_TIME_DELTA/1000000 as etime
FROM dba_hist_sqlstat
WHERE sql_id = 'your_sql_id') b,
dba_hist_active_sess_history c
WHERE a.sql_id = b.sql_id
AND b.sql_id = c.sql_id
ORDER BY SAMPLE_TIME DESC;
查看当前正在执行的SQL运行时长:
SELECT bb.sid, bb.SERIAL#, bb.last_call_et runtime,
aa.SQL_ID, aa.sql_text
FROM v$sql aa, v$session bb
WHERE aa.sql_id = bb.SQL_ID
AND aa.sql_id = 'your_sql_id'
AND bb.status = 'ACTIVE'
ORDER BY last_call_et DESC;
使用gv$sql视图获取更详细的执行统计:
SELECT sql_id, sql_text,
elapsed_time/1000000 total_seconds,
executions,
ELAPSED_TIME/nvl(EXECUTIONS,1)/1000000 avg_seconds
FROM gv$sql
WHERE sql_id = 'your_sql_id';
注意事项:
elapsed_time单位为微秒,需要除以1000000转换为秒
对于长时间运行的SQL,可以结合v$session视图查看last_call_et字段获取当前已运行时间8
如果SQL使用了绑定变量,可能会产生多个执行计划,需要特别注意
Oracle中根据SQL_ID查询每次执行的运行时间
未经允许不得转载:徐万新之路 » Oracle中根据SQL_ID查询每次执行的运行时间