合 Oracle查询长时间运行的SQL语句的剩余时间(慢查询)
Tags: OracleDBA脚本慢查询v$session_longopsV$SQL_MONITOR长时间运行的SQL
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的话,也必须满足下面两个条件。
1 2 3 4 5 | -- Set the TIMED_STATISTICS or SQL_TRACE parameters to true 必须将初始化参数 timed_statistics设置为true(默认为true)或者开启sql_trace -- Gather statistics for your objects with the DBMS_STATS package 必须用ANALYZE或者DBMS_STATS包对对象收集过统计信息。 |
注意,使用V$SESSION_LONGOPS来查找long runnging sql,可能会遗漏一些SQL,因为比如某个SQL语句执行时间比较长,但是每个操作都没有超过6秒。那么这个SQL可能不会被捕获到。
下面是具体的查询SQL语句: