1.高资源消耗进程应急处理

现象描述

某个oracle process CPU使用率非常高。
某个oracle process MEM使用率非常高。

影响因素

暂无

解决方法

1、使用TOPAS观察哪个进程CPU使用率高,找出相关进程号,通过以下命令定位数据库SID号.
Select sid,sql_id,event,status from v$session where paddr in (select addr from v$process where spid=&进程号);
2、使用以下命令查看oracle会话使用内存超过100M的用户

set line 180
col MACHINE for a10
col PROGRAM for a25
col USERNAME for a15
select s.sid, s.serial#, s.username, s.machine, s.program,s.process, s.sql_id, p.pga_alloc_mem/1048576 size_m, p.spid
 from v$session s, v$process p where s.paddr=p.addr 
 and p.pga_alloc_mem>104857600 order by 7 desc;

3、对相关进程和会话进行分析,决定是否kill.

2.IO非常高

现象描述

数据库登陆缓慢,或者根本不可用,无法登陆数据库进行查询等操作。表空间满或者文件系统满了(一般情况下不会发生,因为我们有监控告警)。这里主要是针对异常sql引起数据库hang的情况

影响因素

分析IO高的原因,例如:
A、大量的并行;
B、长事务;
C、物理读高

解决方法

在操作系统使用命令: ps -ef|grep LOCAL=NO |awk ‘{print $2}’ |xargs kill -9
kill所有非本地进程,然后检查系统资源状态,检查数据库状态

3.PGA使用过大

现象描述

影响SQL执行的效率

影响因素

PGA使用过大

解决方法

1、查询当前PGA使用大小:

select sum(pga_alloc_mem)/1048576/1024 size_gb from v$process ;

2.查询使用PGA较大的具体进程
例如以下语句可以查出具体占用内存大于100m的进程信息:(例如)

set line 180
col MACHINE for a10
col PROGRAM for a25
col USERNAME for a15
select s.sid, s.serial#, s.username, s.machine, s.program,s.process, s.sql_id, p.pga_alloc_mem/1048576 size_m, p.spid
 from v$session s, v$process p where s.paddr=p.addr 
 and p.pga_alloc_mem>104857600 order by 7 desc;

3.咨询开发商是否可以删除语句

alter system kill session 'sid,serial#';

4.CPU使用过高应急处理

现象描述

CPU中 usr%使用率达到90以上

影响因素

CPU使用过高,一般表现在以下几点:
A、不良SQL造成的大量等待事件
B、大量的短连接造成CPU负载高。
C、BUG引起

解决方法

1、当CPU出现高负载的时候,首先我们要检查当前的数据库里是否有大量异常等待,例如:latch free, library cache lock/pin 等待事件。
select event,count(*),wait _class from v$session group by event,wait_class order by 2;
如果有,根据相关等待事件分析问题。也可以通过HANG分析,进行阻塞源头会话定位。
2、当CPU出现高负载的时候,检查发现当前数据库并无任何异常等待事件,我们就要参考平时的CPU使用率指标,然后通过会话、事务量来衡量。
3、当CPU出现高负载的时候,检查发现当前数据库并无任何异常等待事件,当前活动SQL语句与平时差别很大,我们可以关闭监听,检查是否由于连接造成的。

5.大表索引被删除导致CPU 100%的应急处理

现象描述

CPU使用率90%以上

影响因素

大表上索引被删除,部分SQL全表扫描导致资源集聚消耗。

解决方法

1、查找某个实例上等待session的信息,定位低效SQL:

select to_char(a.logon_time,'yyyy-mm-dd hh24:mi') logon_time,
       a.sql_id,
       a.event,
       a.username,
       a.osuser,
       a.process,
       a.machine,
       a.program,a.module,
       b.sql_text,
       b.LAST_LOAD_TIME,
       to_char(b.last_active_time,'yyyy-mm-dd hh24:mi:ss') last_active_time,
       c.owner,c.object_name,
       a.last_call_et,
       a.sid,a.SQL_CHILD_NUMBER,
       c.object_type,p.PGA_ALLOC_MEM,a.p1,a.p2,a.p3,
       'kill -9 '||p.spid killstr
  from v$session a, v$sql b, dba_objects c,v$process p
 where a.wait_class <> 'Idle' and a.status='ACTIVE' and p.addr=a.paddr
   and a.sql_id = b.sql_id(+) 
   and a.sql_child_number = b.CHILD_NUMBER(+)
   and a.row_wait_obj# = c.object_id(+)
   and a.type='USER'
 order by a.sql_id,a.event;

2、非rac环境
a.部分大表索引删除,导致全表扫面,cpu 100%
b.此时数据库基本处于hang状态,应用已经无法响应
c.停止相关应用,kill掉这些等待session, 新建索引(parallel nologging)
d.如果无法停止应用,停止数据库的监听,kill掉等待session,新建索引(parallel nologging)

3、rac环境
a.部分大表索引删除,导致全表扫面,cpu 100%
b.此时该节点基本处于hang状态,应用已经无法响应
c.停止相关应用,kill掉这些等待session, 新建索引(parallel nologging)
d.如果无法停止应用,停止所有节点的监听,kill掉等待session,新建索引(parallel nologging)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: oracle