ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORACLE学习之四 查找写的最烂的SQL

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

原创 Linux操作系统 作者:zuwenjiang 时间:2011-09-09 14:09:31 0 删除 编辑
--查看目前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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-03-18

  • 博文量
    13
  • 访问量
    22103