小记:找到占用CPU高的PL/SQL语句

本文介绍了一种通过Oracle数据库内部视图来定位特定进程及其SQL语句的方法,该方法可以有效解决因某个SQL语句导致的服务器CPU占用率过高问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    下午一个同事过来说某Linux测试服务器超级慢,严重影响工作。
    登录到服务器上使用top查看,发现oracle进程把CPU占到了100%。
   于是用了以下步骤把导致性能问题的SQL找出来:
1、使用top找到占CPU100%的ORACLE进程的pid为1234;
2、打开PL/SQL DEV,查询这个进程的信息:
SELECT * FROM V$PROCESS WHERE spid=1234;
3、找到这个进程对应的会话的信息:
SELECT sid, program FROM V$SESSION s
WHERE EXISTS(SELECT 1 FROM V$PROCESS WHERE spid=1234 AND ADDR = S.PADDR);
4、从上面已经知道是哪个客户端的哪个程序导致的了,继续:
    找到这些会话的SQL
SELECT sql_text
FROM V$SESSION a LEFT OUTER JOIN v$sqltext b ON a.sql_address=b.address
WHERE EXISTS(SELECT 1 FROM V$PROCESS WHERE spid=17518 AND ADDR = a.PADDR)
ORDER BY a.SERIAL#, b.piece
5、这个语句要更好一点,根据CPU占用情况排序
SELECT b.sql_text
FROM V$SESSION a LEFT OUTER JOIN v$sqlarea b ON a.sql_address=b.address
WHERE EXISTS(SELECT 1 FROM V$PROCESS WHERE spid=1234 AND ADDR = a.PADDR)
ORDER BY b.CPU_TIME DESC


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值