数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

如何查询占CPU高的oracle进程


发布日期:2019年11月22日
 
如何查询占CPU高的oracle进程
oracle占用cpu过高怎么处理本文将介绍有关oracle进程CPU占用率过高的问题需要了解跟多的朋友可以参考下

首先使用TOP命令传到占用CPU高的SPID号

PID USERNAME THR PRI NICE SIZE RES STATE TIME CPU COMMAND

oracle K K run H % oracle

oracle K K sleep H % oracle

使用DBA账户登录数据库使用以下SQL语句查询:

SELECT * FROM V$PROCESS WHERE spid=;查询到SQL相关信息

根据以上查询到的信息使用以下SQL查询:

SELECT sid program FROM V$SESSION S WHERE EXISTS(SELECT FROM V$PROCESS WHERE spid= AND ADDR = SPADDR);

可以查询到具体那个客户端查询一直在不断占用ORACLE资源!

最后对这个查询进行处理!

根据SID查得SQLITPUB

复制代码 代码如下:

select sql_textITPUB

from v$sqltext

where ahashvalue=(select sql_hash_value

from v$session b

where bSID=&sid)

order by piece ASC;

根据lockwait字段可以查询当前正在等待的锁的相关信息

复制代码 代码如下:

select * from v$lock where kaddr in (select lockwait from v$session where sid= $sid);

(sql_addresssql_hash_value)(prev_sql_addrprev_hash_value) 根据这两组字段 可以查询到当前session正在执行的或最近一次执行的sql语句的详细信息

select * from v$sqltext where address = &sql_address and hash_value = &sql_hash_value;

根据PID查SQL相关信息:

复制代码 代码如下:

select idserial# usernameosusermachineprogramprocessto_char(logon_timeyyyy/mm/dd hh:mi:ss) logon from v$session where paddr in ( select addr from v$process where spid in(&pid));

根据PID查SQL语句

复制代码 代码如下:

SELECT ausernameamachineaprogramasidaserial#astatuscpiececsql_text FROM v$session av$process bv$sqltext c WHERE bspid=&spid AND baddr=apaddr AND asql_address=caddress(+) ORDER BY cpiece;

得到进程的sid号

复制代码 代码如下:

select idserial# usernameosusermachineprogramprocessto_char(logon_timeyyyy/mm/dd hh:mi:ss) logon from v$session where paddr in ( select addr from v$process where spid in(&pid));

得到session的sqltext语句

复制代码 代码如下:

select sql_text from v$sqltext_with_newlines where hash_value in (select SQL_HASH_VALUE from v$session where paddr in (select addr from v$process where spid= &pid)) order by piece;

上一篇:Oracle数据完整性和锁机制简析

下一篇:Oracle SQL性能优化系列学习三