定期检查m000是否消耗pga

偶然发现一个库的m000占用pga较高,导致ora-4036问题
在这里插入图片描述

sho parameter ga 看看当前参数
在这里插入图片描述
好像是bug
在这里插入图片描述
在这里插入图片描述

需要定期检查



select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')riqi from dual;

select round(sum(PGA_ALLOC_MEM)/1024/1024,2) "Total PGA Allocated (Mb)" from v$process p, v$session s where p.addr = s.paddr;

col username for a15
set lin 300 pages 100
col PROGRAM for a30
col PID_REMOTE for a20
col sid for a8
col status for a12
col spid for a8
select * from (
SELECT s.username, SUBSTR(s.sid,1,5) sid, p.spid, logon_time,
 SUBSTR(s.program,1,22) program , s.process pid_remote,
 s.status,
 ROUND(pga_used_mem/1024/1024) usme,
 ROUND(pga_alloc_mem/1024/1024) alme,
 ROUND(pga_freeable_mem/1024/1024) frme,
 ROUND(pga_max_mem/1024/1024) mame
FROM  v$session s,v$process p
WHERE p.addr=s.paddr --and p.pname in ('M000','M001','M002','M003','M004','M005','M006','M007','M008','M009')
ORDER BY mame DESC) where rownum<21;

--大于2048的m000进程就kill
set pagesize 9999 lin 250 echo off heading off verify off feedback off trims on
spool /tmp/kill_m000.sql
select 'alter system kill session '''||a.sid||','||a.serial#||''' immediate;' killcmd from v$session a where  sid in (
SELECT  s.sid  
FROM  v$session s,v$process p
WHERE p.addr=s.paddr and p.pname in ('M000','M001','M002','M003','M004','M005','M006','M007','M008','M009')
 and ROUND(p.pga_alloc_mem/1024/1024)>2048
 and s.status<>'KILLED'
);
spool off
@/tmp/kill_m000
exit


crontab 
*/30 * * * * /home/oracle/check_m000.sh

再观察

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值