记一次Oracle数据库CPU100%的线上问题排查

今天跟同事突然发现系统运行慢,并且很多接口调用超时,通过排查,发现Oracle数据库服务器CPU满负荷运行。通过运行下面几个SQL,排查到系统每隔一段时间就去执行,并且开启了400多个会话不断的去执行这个SQL。经过处理,决定先将这些会话session杀掉,具体步骤如下:

1.top找到具体PID

2.根据PID查找对应正在执行的sql语句

select sql_text,spid,v$session.program,process from 
  v$sqlarea,v$session,v$process
  where v$sqlarea.address=v$session.sql_address
  and v$sqlarea.hashvalue=v$session.sql_hash_value
  and v$session.paddr=v$process.addr
  and v$process.spid in (PID);

3.根据PID查找正在执行的进程
SELECT s.username, s.sid, s.serial#
  FROM v$session s, v$process p
 WHERE s.paddr = p.addr
   AND p.spid = PID

4.生成杀死会话session的SQL语句

spid参考第二点的SQL生成

SELECT CONCAT('ALTER SYSTEM KILL SESSION ''',CONCAT(CONCAT(CONCAT(SID,','),SERIAL#),''';')) FROM v$process p
 WHERE s.paddr = p.addr  AND p.spid in (spid)

5.杀掉所有会话,CPU不在满负荷运转

你可能感兴趣的:(Oracle)