oracle导致的负载高,Oracle 11g 数据库服务器CPU、IO负载高的故障排除流程

这篇博客介绍了如何诊断Oracle 11g数据库服务器CPU和IO负载高的问题。通过使用top和ps命令,博主发现了几个高CPU使用率的进程,进一步调查发现这些进程与DBMS_SCHEDULER模块的job有关。经过查询V$SESSION_WAIT和V$SESSION,博主定位到问题SQL并停止了引起问题的OSMSR_OPERATION_DURATION job,从而解决了高负载问题。

使用top查看负载高的进程

~ [OSMSRDB]$ top

top - 11:02:43 up 12 days, 17:15,  4 users,  load average: 1.50, 0.93, 0.36

Tasks: 363 total,   1 running, 362 sleeping,   0 stopped,   0 zombie

Cpu(s):  1.2%us,  0.3%sy,  0.0%ni, 68.4%id,30.1%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:  10129680k total,  7539812k used,  2589868k free,   478612k buffers

Swap:  4194300k total,        0k used,  4194300k free,  5973136k cached

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

22584 ora112    -2   0  837m  16m  14m S  100.0  3.7  74:09.62 oracle

3274 ora112    -2   0  837m  16m  14m S  1.0  0.2 211:11.85 oracle

6147 ora112    -2   0  837m  16m  14m S  1.0  0.2  19:25.63 oracle

7787 ora112    -2   0  837m  16m  14m S  1.0  0.2  62:43.66 oracle

10696 ora112    -2   0 2251m  16m  14m S  1.0  0.2 190:34.75 oracle

17198 ora112    -2   0  837m  16m  14m S  1.0  0.2  60:53.89 oracle

1874 root      20   0 13584  740  576 S  0.3  0.0   1:11.80 lldpad

3323 ora112    20   0  837m  18m  16m S  0.3  0.2  21:49.55 oracle

使用 PS 查看进程的信息

~ [OSMSRDB]$ ps -ef|grep 22584

ora112   15567 16186  0 11:06 pts/1    00:00:00 grep 22584

ora112   22584     1  1 Sep19 ?        01:14:13 ora_vktm_OSMSRDB

登陆数据库,查看等待事件

SELECT * FROM V$SESSION_WAIT WHERE WAIT_CLASS <> 'Idle' ORDER BY SECONDS_IN_WAIT DESC;

8baad189a5c67550f057a2729114537d.png

查看数据库正在执行的SQL,发现一直在执行的是DBMS_SCHEDULER模块,job名是OSMSR_OPERATION_DURATION

select s.SID,s.SERIAL#,MACHINE,TERMINAL, OSUSER, SCHEMANAME, PROGRAM,MODULE,ACTION,CLIENT_INFO,

decode(s.COMMAND,3,'SELECT',s.COMMAND) COMMAND,STATUS,SQL_ID,SQL_ADDRESS,SQL_EXEC_START,

DECODE(STATUS,'ACTIVE',LAST_CALL_ET,NULL) "SQL执行时间",EVENT,STATE,SECONDS_IN_WAIT,SERVICE_NAME

from V$SESSION s where s.USERNAME is not null AND WAIT_CLASS <> 'Idle';

6cb757663a2472a59b61c14a9b3a15a0.png

查看job

select job_name,state from dba_scheduler_jobs where state= 'RUNNING';

2689b38a700a9d18346878f91d65ecbb.png

停止job

SQL> BEGIN

DBMS_SCHEDULER.STOP_JOB('OSMSR_OPERATION_DURATION');

END;  2    3

4  /

PL/SQL procedure successfully completed.

SQL> select job_name,state from dba_scheduler_jobs where state= 'RUNNING';

no rows selected

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值