正德厚生,臻于至善

Oracle中根据SQL_ID查询每次执行的运行时间

在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使用了绑定变量,可能会产生多个执行计划,需要特别注意
赞(0) 打赏
未经允许不得转载:徐万新之路 » Oracle中根据SQL_ID查询每次执行的运行时间

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册