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

0    1766    3

Tags:

👉 本文共约1450个字,系统预计阅读时间或需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分钟,并可以会存在更长的时间,取决于新的查询所需要的空间。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

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

您可能还喜欢...

发表回复