查找正在运行的sql语句及该语句运行的时间
2011-03-15 13:11
453 查看
查询正在运行的sql语句:
SQL> select address,sql_text,piece from v$session,v$sqltext where address=sql_address order by address,piece
从网上摘下:
$session中的last_call_et列表示从STATUS(状态)改变到当前的时间(单位是秒)。
也就是说,如果session当前是inactive的,则表示inactive的时间
如果session当前是active的,则表示active的时间。
另外需要注意的是last_call_et表示的是last call的时间。
对于单条SQL而言,是指sql执行时间;对于plsql而言,则是指整个plsql的执行时间。
后台进程一直是active的,因此后台进程的last_call_et与实例运行时间相近。
查找方法:
SQL> select sid,serial#,username,status,last_call_et from v$session where status
='ACTIVE' and username is not null order by last_call_et desc;
SID SERIAL# USERNAME STATUS LAST_CALL_ET
---------- ---------- ---------- -------- ------------
128 168 SCOTT ACTIVE 3025
130 136 SYS ACTIVE 1236
125 1 DBSNMP ACTIVE 3
137 527 SYS ACTIVE 0
再根据SID找出执行的SQL或PL/SQL:
select sql_text from v$session a,v$sqltext_with_newlines b
where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value
and a.sid=&sid order by piece;
SQL> l
1 select sid,serial#,username,machine,last_call_et,status from v$session
2 where status='INACTIVE' and username is not null
3* order by last_call_et
SQL> select sql_text from v$session a,v$sqltext_with_newlines b
2 where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash
_value
3 and a.sid=&sid order by piece;
输入 sid 的值: 128
原值 3: and a.sid=&sid order by piece
新值 3: and a.sid=128 order by piece
SQL_TEXT
----------------------------------------------------------------
insert into test
select * from test
可以看到上面的语句已经运行了3025秒,相当于50分钟.
如果改语句不重要,可以kill掉
SQL> alter system kill session '128,168';
系统已更改。
SQL> select address,sql_text,piece from v$session,v$sqltext where address=sql_address order by address,piece
从网上摘下:
$session中的last_call_et列表示从STATUS(状态)改变到当前的时间(单位是秒)。
也就是说,如果session当前是inactive的,则表示inactive的时间
如果session当前是active的,则表示active的时间。
另外需要注意的是last_call_et表示的是last call的时间。
对于单条SQL而言,是指sql执行时间;对于plsql而言,则是指整个plsql的执行时间。
后台进程一直是active的,因此后台进程的last_call_et与实例运行时间相近。
查找方法:
SQL> select sid,serial#,username,status,last_call_et from v$session where status
='ACTIVE' and username is not null order by last_call_et desc;
SID SERIAL# USERNAME STATUS LAST_CALL_ET
---------- ---------- ---------- -------- ------------
128 168 SCOTT ACTIVE 3025
130 136 SYS ACTIVE 1236
125 1 DBSNMP ACTIVE 3
137 527 SYS ACTIVE 0
再根据SID找出执行的SQL或PL/SQL:
select sql_text from v$session a,v$sqltext_with_newlines b
where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value
and a.sid=&sid order by piece;
SQL> l
1 select sid,serial#,username,machine,last_call_et,status from v$session
2 where status='INACTIVE' and username is not null
3* order by last_call_et
SQL> select sql_text from v$session a,v$sqltext_with_newlines b
2 where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash
_value
3 and a.sid=&sid order by piece;
输入 sid 的值: 128
原值 3: and a.sid=&sid order by piece
新值 3: and a.sid=128 order by piece
SQL_TEXT
----------------------------------------------------------------
insert into test
select * from test
可以看到上面的语句已经运行了3025秒,相当于50分钟.
如果改语句不重要,可以kill掉
SQL> alter system kill session '128,168';
系统已更改。
相关文章推荐
- sybase查看用户正在运行的sql语句
- 监控SQL:执行表中所有sql语句、记录每个语句运行时间(3)
- 探讨:MySQL中如何查询当前正在运行的SQL语句
- 使用Profiles分析SQL语句运行时间和消耗资源
- sql server 正在运行的sql语句
- 运行数据库正在使用的sql语句
- oracle之 v$sql_monitor 监视正在运行的SQL语句的统计信息
- 通过PID查找当前进程正在执行的SQL语句
- oracle如何查看后台正在运行着的sql语句
- 如何查看数据库中某用户,正在运行什么SQL 语句
- 查找正在运行或上一次执行的sql
- oracle之 v$sql_monitor 监视正在运行的SQL语句的统计信息
- 查找时间范围时用的SQL语句
- MSSQL计算sql语句运行时间
- 查找时间范围时用的SQL语句
- 使用邮件发送运行时间久的SQL语句
- MySQL查看sql语句运行时间
- SQL2000里如何计算SQL语句运行的时间
- 使用v$sql_monitor视图查看当前正在运行的SQL语句的统计信息