监控操作发现cpu被占用比较高百分97左右,运行进程队列等待严重,这说明cpu负载很高然后进一步分析
Vmstat 2
Top看到oracle服务器占用比较高cpu
Lsof 利用pid找到这个进程打开几个系统表空间,这里说明可能oracle后台服务问题,业务系统是不会读取系统表空256u,257u都是说明读取或者写入数据。
看到
通过下面语句通过数据库查询出来正常等待和运行回话,从下面分析出来可以看出sid:9引起问题,获取到sql语句得到一个调度进程引起。
select a.SID,
a.SERIAL#,
a.USERNAME,
b.PARSE_CALLS,
b.PARSING_SCHEMA_NAME,
b.CPU_TIME/1000000 cpu_time,
b.ELAPSED_TIME/1000000 elapsed_time,
b.DISK_READS,
b.DIRECT_WRITES,
b.BUFFER_GETS,
a.event,
b.sql_text,
b.SQL_FULLTEXT
from v$session a inner join v$sqlarea b
on a.SQL_HASH_VALUE = b. hash_value;
Awr报告等待事件
利用等待事件查看那个用户引起这里查询出来sid:9对应后台进程j000job后台进程
这边就可以确认引起cpu高的就是j000后台进程
SQL> select sid, program ,machine from v$session where paddr in (
2 SELECT s.paddr
3 FROM x$kglpn p, v$session s
WHERE p.kglpnuse=s.saddr(+) AND p.kglpnmod <> 0
and kglpnhdl in ( select p1raw from v$session_wait where event in ('library cache pin','library cache lock' ,'library cache load lock'))); 4 5
SID PROGRAM
---------- ------------------------------------------------
MACHINE
----------------------------------------------------------------
9 oracle@iZ25u8jjjrhZ (J000)
iZ25u8jjjrhZ
查看当前正在运行job确实有一个job正在无限制运行
select * from Dba_Jobs_Running
查询出来sid、serial#
SQL>select * from v$session where sid=9
从数据库kill
SQL> SQL> alter system kill session '9,32783';
alter system kill session '9,32783'
*
ERROR at line 1:
ORA-00031: session marked for kill
提示回话已经被标记为结束
用sid查询出来操作系统进程pid
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=9
操作系统查出来也是对应j000进程
[root@iZ25u8jjjrhZ ~]# ps -ef|grep 12219
root 3291 32582 0 10:44 pts/8 00:00:00 grep 12219
oracle 12219 1 0 Jul29 ? 00:00:00 ora_j000_oracle11
最后找出pid
Kill -9 12219
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29065182/viewspace-1760335/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29065182/viewspace-1760335/