--查看目前ORACLE实例中执行的进程,
select PADDR,NAME from v$bgprocess where paddr<>'00'
PADDR NAME
-------- -----
342478DC PMON
34247ECC PSP0
342484BC MMAN
34248AAC DBW0
3424909C LGWR
3424968C CKPT
34249C7C SMON
3424A26C RECO
3424A85C CJQ0
3424D7DC QMNC
3424AE4C MMON
3424B43C MMNL
--SESSION的使用,在ORACLE中,各个客户端与服务端通过SESSSION通话,各个SESSION可以体现在进程(线程)中。
--获取当前sid(session identifier)
SQL> select distinct sid from v$mystat;
SID
----------
153
--实例,找出哪个应用或者SQL是非常费资源的,(win下需要使用process explorer工具寻找线程ID)。
declare
i number:=0;
begin
loop
i :=i+1;
end loop;
end;
/
--此实例是死循环,耗CPU明显。oracle进程耗费CPU在双核机器上达到50%左右,即满负荷。
--通过process explorer工具,可以发现ORACLE进程中的2372线程,占用CPU率极高。可知上面死循环,由2372在执行。
--查出该线程使用的地址 为[3424CBFC]
SQL>select ADDR,SPID,USERNAME,TERMINAL,PROGRAM from v$process where spid='2372'
3424CBFC 2372 SYSTEM NVIED-ED9402501 ORACLE.EXE (SHAD)
--通过线程的内存地址,查出SESSION ID,还有客户端的机器名,和所执行的SQL_ID
SQL>select * from v$session where PADDR='3424CBFC'
--查询SQL_ID得到所执行的SQL语句;
select * from v$sql where sql_id='7mqj01yncjrta'
--至此,能够得知是什么语句耗费CPU最厉害。则是优化的重点。
--关闭控制台后,该线程停止运行。释放资源。SID也不存在了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21143887/viewspace-707033/
,如需转载,请注明出处,否则将追究法律责任。