Oracle查询长时间运行的SQL语句的剩余时间

0    1093    3

Tags:

👉 本文共约1434个字,系统预计阅读时间或需6分钟。

Oracle数据库中如何查找、定位一些正在执行但是运行时间很长的SQL语句(long running sql)呢?注意,我们这里只查看正在执行long running sql,而不是查询历史执行时间很长的SQL语句(请不要混淆)。大概有下面一些方法供参考。

方法1:通过V$SESSION_LONGOPS来查找

在Oracle中,可以使用视图v$session_longops查询运行时间较长的SQL语句,可以查询到预估的剩余执行时间,这包括常规的查询SQL语句,建表,rman备份和还原等操作,都可以查询。

V$SESSION_LONGOPS 显示运行时间超过 6 秒(以绝对时间为单位)的各种操作的状态。这个视图不但可以监控运行时间比较长的SQL,也会记录RMAN备份、EXP/EXPDP、收集统计信息、排序等操作,基本数据库所有运行时间超过6秒的SQL都会记录在这个视图中。

如果要使用V$SESSION_LONGOPS的话,也必须满足下面两个条件。

注意,使用V$SESSION_LONGOPS来查找long runnging sql,可能会遗漏一些SQL,因为比如某个SQL语句执行时间比较长,但是每个操作都没有超过6秒。那么这个SQL可能不会被捕获到。

下面是具体的查询SQL语句:

可直接使用的SQL语句

需要包

结果示例

如下结果是我做rman备份,开了4个并行进程,结果:

如下是还原操作:

方法2:通过V$SQL_MONITOR来查找

Oracle 11g中引入了新的动态性能视图V$SQL_MONITOR,该视图用以显示Oracle监视的SQL语句信息。SQL Monitor会对那些并行执行或者消耗5秒以上CPU时间或I/O时间的SQL语句自动监控,同时在V$SQL_MONITOR视图中产生一条记录。V$SQL_MONITOER收集的信息每秒刷新一次,接近实时,当SQL执行完毕,信息并不会立即从V$SQL_MONITOER中删除,至少会保留1分钟,V$SQL_PLAN_MONITOR视图中的执行计划信息也是每秒更新一次,当SQL执行完毕,它们同样至少被保留1分钟,并可以会存在更长的时间,取决于新的查询所需要的空间。

使用v$sql_monitor视图中所监控的SQL语句时需在满足以下条件之一:

1) 自动监控任何并行语句

2) 如果一个SQL语句消耗了超过5秒的CPU或I/O时间,则会自动监控

3) 监控任何在语句级启用监控的SQL语句(使用/*+ monitor */提示SQL语句)

注意:要开启sql mointor这个特性/功能的前提条件:

1:初始化参数STATISTICS_LEVEL必须设置为TYPICAL或ALL。该参数默认为TYPICAL

2:CONTROL_MANAGEMENT_PACK_ACCESS必须设置为DIAGNOSTIC+TUNING。该参数默认为DIAGNOSTIC+TUNING

使用下面SQL查询,如果你使用PL/SQL Developer等图形工具,可以去掉设置格式部分。

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

输入对应的SQL_ID,查看对应的报告。

方法3:通过V$SESSION和V$SQLAREA来查询

注意,下面SQL统计的SQL运行时间为AVG_ELAPSED_TIME可能跟V$SQL_MONITOR中的时间有出入,确切来说,V$SQL_MONITOR中的才是SQL运行时长的精准时间。这个是因为统计口径问题,这里统计的是SQL运行的平均时间,而不是这个SQL的真正运行时间,所以下面SQL仅供参考。

参考

https://mp.weixin.qq.com/s/NCi4qBsCnlnLrJ3puuQ0Ag

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

10 − 3 =

 

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部