ORACLE学习之四 查找写的最烂的SQL

--查看目前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博客 ” ,链接:http://blog.itpub.net/21143887/viewspace-707033/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21143887/viewspace-707033/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值