突然
接到监控告警
aix数据库内存使用超过阈值,请分析
先看内存使用吧
topas中能看到comp内存使用79%,非计算9%
看看哪个进程占用多呢
占用内存最高的20个进程(aix)
ps aux |head -1 ; ps aux|sort -rn +4 |head -20
看到rbal进程占用11%,比对节点2同样如此,而其他环境却很低
看来rbal有些异常,按说只有添加、删除asm磁盘才会导致其干活,这个最近没有扩容asm磁盘组操作,按说不应该活跃。
看rbal进程trc日志
ls -t *.trc|grep rbal
trc文件大小居然达到了2.5G,有些异常
tail +ASM1_rbal_13057.trc
看到如下信息
*** 2016-02-22 16:03:37.350
2016-02-22 16:03:37.349: [ default]failed to initialize skgp context
2016-02-22 16:03:37.350: [ default]slos op : sslssreghdlr
2016-02-22 16:03:37.350: [ default]slos dep : Error 0 (0)
2016-02-22 16:03:37.350: [ default]slos loc : sskgpinit1
2016-02-22 16:03:37.350: [ default]slos info:
[ CLWAL]clsw_Initialize: OLR initlevel [30000]
2016-02-22 16:03:37.350: [ default]a_init: Unable to get log name. Retval:[-4]
2016-02-22 16:03:37.366: [ GPNP]clsgpnp_dbmsGetItem_profile: [at clsgpnp_dbms.c:313] Result: (0) CLSGPNP_OK. got ASM-Profile.DiscoveryString='o/*/*'
此信息不断输出,每10秒1次,且从2015年就开始了
感觉像是某些程序触发了bug,搜索mos
扫了一眼,比较幸运找到一个,看一下版本及症状
查当前库版本opatch lspatches,11.2.0.4的没有打补丁
触发原因如下
解决方案呢
用替代视图
嗯,看来还是v$asm_disk_stat这个好,低成本
到底哪个孙子引起的呢?
set linesize 300
col sql_exec_time for a22
col SAMPLE_TIME for a22
col username for a12
col program for a35 trunc
col machine for a30 trunc
col action for a25 trunc
select session_id,session_serial#,username,a.program,a.machine,a.action,a.sql_id,sql_plan_hash_value,
to_char(a.sql_exec_start,'yyyy-mm-dd hh24:mi:ss')sql_exec_start,to_char(a.sample_time,'yyyy-mm-dd hh24:mi:ss')sample_time
from v$active_session_history a left join dba_users b on a.user_id=b.user_id left join v$sql s on a.sql_id=s.sql_id where sample_time>sysdate-1/24
and UPPER(s.sql_text) like '%V$ASM_DISK%' and a.session_id<>sys_context('userenv','sid') and rownum<11 ;
果然是BMC用户,定期监控asm触发的
好了,重启一下数据库集群,然后可释放内存并减少trc文件大小(把老的trc删除即可)
打补丁不太现实了,升级到Oracle 23ai更是夸张
你想直接echo>+ASM1_rbal_13057.trc 降低大小,不确定内存是否会降下来,可能会有其他风险,稳妥的dba不会这么干的。