oracle消耗资源,oracle捕捉消耗cpu资源进程

很多时候我们的服务器可能会经历CPU消耗100%的性能问题.

排除系统的异常,这类问题通常都是因为系统中存在性能低下甚至存在错误的SQL语句, 消耗了大量的CPU所致.

使用top监控数据库进程

top - 14:27:12 up 58 days, 13:26,  4 users,  load average: 0.27, 0.35, 0.36

Tasks: 262 total,   1 running, 261 sleeping,   0 stopped,   0 zombie

Cpu(s):  1.5% us,  0.4% sy,  0.0% ni, 98.0% id,  0.1% wa,  0.0% hi,  0.0% si

Mem:  32906904k total, 11103516k used, 21803388k free,   272816k buffers

Swap: 24579408k total,        0k used, 24579408k free,  9181336k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

26117 oracle    15   0 5757m 2.9g 2.9g S   49  9.2  40:20.73 oracle

26115 oracle    16   0 5757m 3.9g 3.9g S    2 12.4  70:31.67 oracle

7760 root      16   0  532m  19m 9436 S    0  0.1  39:13.60 crsd.bin

21172 oracle    16   0 5797m  71m  37m S    0  0.2   4:50.59 oracle

25853 oracle    16   0 5753m 174m 168m S    0  0.5   0:39.75 oracle

13424 oracle    15   0 5751m 403m 400m S    0  1.3   0:04.43 oracle

6901 oracle    16   0 36192 2104 1496 S    0  0.0   0:00.61 sshd

寻找CPU使用过量的session ,找出高CPU利用率的SQL:

SQL>SELECT /*+ ORDERED */

sql_text

FROM v$sqltext a

WHERE (a.hash_value, a.address) IN

(SELECT decode(sql_hash_value, 0, prev_hash_value, sql_hash_value), decode(sql_hash_value, 0, prev_sql_addr, sql_address)

FROM v$session b

WHERE b.paddr = (SELECT addr

FROM v$process c

WHERE c.spid = '&pid'))

ORDER BY piece ASC;

Enter value for pid: 26117

old   9: WHERE c.spid = '&pid'))

new   9: WHERE c.spid = '26117'))

SQL_TEXT

-----------------------------------------------------------------------------------------------------

select * from(     select a.*,rownum rn from (select max(a.YWSJ)

YWSJ,max(a.CLLINK_DM) CLLINK_DM,a.WSBH,a.WSDM,a.CUST_ID,a.CUST_

NAME,a.DY_DM,a.DY_MC,a.CUST_TELS,a.CUST_MOBILE,a.YYSJ,a.SEATCODE

,a.SDSJ,a.CBCS,a.THEID,a.THENAME,a.SWJG_DM,a.SWJG_MC,a.LSRYID,a.

LSRYNAME,a.DDSTATE,a.SEND_TYPE,a.SNAME,a.SPOSTNUM,a.STEL,a.SMOBI

LE,a.SADDRESS,a.ISSAVE,a.COMM_TEL,a.LSSJ,a.SL,a.FY,a.SFPSJ,a.FPH

M,a.YJHM,a.MONTH,a.ISBR,a.MSGFLAG,a.LINETEL,a.SJRADDRESS,A.MAILT

YPE,A.YWTYPE,A.GETTYPE,A.NUMFORM. from(SELECT DISTINCT T.*,s.ywsj

, s.cllink_dm ,B.MAILTYPE,B.YWTYPE,B.GETTYPE,B.NUMFORM. FROM etc_

ls_ywxx s,ETC_YWSYWS T ,etc_ems B  WHERE T.WSBH = B.ID  AND b.ID

= s.wsbh AND T.WSBH=s.WSBH  AND T.ISSAVE = '0' AND  T.WSDM = '1

002'  AND  1 = 1  AND(T.SWJG_DM = '111200' OR s.PDJG_DM ='111200

') AND  1 = 1  AND  1 = 1  AND  1 = 1  AND  1 = 1  AND  1 = 1  A

ND  1 = 1  AND  1 = 1  AND  1 = 1  AND  1 = 1  AND  1 = 1  AND

1 = 1  AND  1 = 1  AND  1 = 1  AND  1 = 1  AND  1 = 1  AND  1 =

1  AND  1 = 1  AND  1 = 1  AND  1 = 1  AND  1 = 1  AND  1 = 1  A

ND  1 = 1  AND  1 = 1  AND  1 = 1  AND  1 = 1  AND  1 = 1   AND

1 = 1  AND  1 = 1  AND  1 = 1  AND  1 = 1  AND  1 = 1  AND  1 =

1  AND  T.LINETEL LIKE '%'||'15010110829'||'%'  AND  1 = 1  AND

T.SDSJ >= '2009-05-07'  AND  T.SDSJ < '2009-08-06'  ) a group

by a.WSBH,a.WSDM,a.CUST_ID,a.CUST_NAME,a.DY_DM,a.DY_MC,a.CUST_TE

LS,a.CUST_MOBILE,a.YYSJ,a.SEATCODE,a.SDSJ,a.CBCS,a.THEID,a.THENA

ME,a.SWJG_DM,a.SWJG_MC,a.LSRYID,a.LSRYNAME,a.DDSTATE,a.SEND_TYPE

,a.SNAME,a.SPOSTNUM,a.STEL,a.SMOBILE,a.SADDRESS,a.ISSAVE,a.COMM_

TEL,a.LSSJ,a.SL,a.FY,a.SFPSJ,a.FPHM,a.YJHM,a.MONTH,a.ISBR,a.MSGF

LAG,a.LINETEL,a.SJRADDRESS,A.MAILTYPE,A.YWTYPE,A.GETTYPE,A.NUMFO

RM order by SDSJ DESC)a     where rownum <=20)     where rn >0

27 rows selected.

这段代码就是当前正在疯狂消耗CPU的资源.

接下来需要进行的工作就是找出这段代码的问题,看是否可以通过优化提高其效率,减少资源消耗

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值