oracle占用cpu过高怎么处理,本文将介绍有关oracle进程cpu占用率过高的问题,需要了解跟多的朋友可以参考下
1:首先使用top命令传到占用cpu高的spid号
pid username thr pri nice size res state time cpu command
3575 oracle 1 12 0 0k 0k run 748.6h 24.98% oracle
3571 oracle 1 22 0 0k 0k sleep 706.2h 22.84% oracle
2:使用dba账户登录数据库,使用以下sql语句查询:
select * from v$process where spid=3575;查询到sql相关信息
3:根据以上查询到的信息使用以下sql查询:
select sid, program from v$session s where exists(select 1 from v$process where spid=3575 and addr = s.paddr);
可以查询到具体那个客户端查询一直在不断占用oracle资源!
最后对这个查询进行处理!
4.根据sid查得sqlitpub
复制代码 代码如下:
select sql_textitpub
from v$sqltext
where a.hashvalue=(select sql_hash_value
from v$session b
where b.sid=’&sid’)
0order by piece asc;
根据lockwait字段可以查询当前正在等待的锁的相关信息:
复制代码 代码如下:
select * from v$lock where kaddr in (select lockwait from v$session where sid= $sid);
(sql_address,sql_hash_value),(prev_sql_addr,prev_hash_value) 根据这两组字段, 可以查询到当前session正在执行的或最近一次执行的sql语句的详细信息:
select * from v$sqltext where address = &sql_address and hash_value = &sql_hash_value;
根据pid查sql相关信息:
复制代码 代码如下:
select id,serial# ,username,osuser,machine,program,process,to_char(logon_time,’yyyy/mm/dd hh24:mi:ss’) logon from v$session where paddr in ( select addr from v$process where spid in(‘&pid’));
根据pid查sql语句
复制代码 代码如下:
select a.username,a.machine,a.program,a.sid,a.serial#,a.status,c.piece,c.sql_text from v$session a,v$process b,v$sqltext c where b.spid=’&spid’ and b.addr=a.paddr and a.sql_address=c.address(+) order by c.piece;
得到进程的sid号:
复制代码 代码如下:
select id,serial# ,username,osuser,machine,program,process,to_char(logon_time,’yyyy/mm/dd hh24: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;