不停应用重启oracle数据库,此类情况下解决Oracle数据库重启的四种方案

故障描述

系统环境

AIX 6100-07-05-1228

Oracle 11g

故障分析

首先请DBA团队分析oracle数据库的日志,经DBA分析得知数据库有两个控制数据库资源的进程在20:06时hang了大概几十秒,oracle出于数据保护的机制便重启了数据库。

然后从操作系统层面分析在20:06时操作系统的资源使用情况。

567694183d3a49d9b5d93113d14d6487.png

从nmon的数据中可以得知CPU在全天使用率都很低,都低于30%,可见CPU使用情况正常。

cb05d1cb56f7a4eb4b579d740778f0d8.png

分析内存的数据可知全天内存使用率并不高,基本稳定在80%以内,在20:06之前的一段时间,有计算内存增长情况,这和当时处理的业务相关。(注:nmon采样点是6分钟采一个点并取平均值)

ddabf9ae140bf89395b92849b5b08cb3.png

再分析内存的换页,从图可以见看到,在20:06时产生了大量的换页,当瞬间产生大量换页时说明有应用程序在短时间内申请了大量的内存,同时内存不足并启动lrud进程进行换页,换页带来的问题就是会影响系统的性能。

a3daf131328c853fdcce5ec15aa99a7b.png

由于nmon采样的颗粒度比较粗,而oswatcher监控的采样间隔是20秒,因此分析oswatcher的数据,主要分析vmstat的输出,从vmstat的输出可以看到当时free还有3103118个内存页面(每个页面4KB),即12GB内存,而此时有746个pi和16989个po。因此可见在内存有剩余的情况下产生了换页。

23bcf61ffc72c17ab2f6d5bf1c59c154.png

下面分析在内存有剩余的情况下产生换页的原因,AIX的内存管理机制是把内存分为多个内存池(memory pool),这个系统有90GB内存,120个逻辑CPU。AIX会按8个逻辑CPU分一个内存池的划分机制,把内池划分为多个内存池。即这个系统它的内存池有15个:

25b5b90ac20219e19b9e8549dc856acb.png

为了优化内存的管理,在AIX 6.1时引入了numperm_global参数,这个参数设置为0时代表在换页时以内存池为单位去判断是否把计算内存换出,这个参数设置为1时代表在换页时以全局为单位去判读是否把计算内存换出。

在AIX特定版本下(6100-06-sp7 / 6100-06-sp8 / 6100-06-sp9 / 6100-07-sp4 / 6100-07-sp5)numperm_global这个参数设置为1会触发操作系统的bug,即当系统的PIN住的64KB页面达到maxpin%(80%)时,换页程序在换取4KB页面时,即使有文件系统缓存剩余(大于minperm,缺省为物理内存的3%)的情况下,也只换取计算内存页面,而计算内存页面被换出会对性能有很大的影响并有可能导致应用程序缓慢或者数据库挂起。

一般来说,大量PIN 64KB内存页面应用程序并不多,但是Oracle数据库出于提高性能的原因,一般都会将SGA和PGA PIN在内存里。如果SGA和PGA加起来接近maxpin%,那么在numperm_global设置为1的时候就有很大的可能触发上面提到的bug,导致early paging问题。

经检查发现numperm_global这个参数设置的为1,因此在oracle有大量64KB页面申请时,64KB页面达到maxpin%(80%),这时即使有12GB剩余的内存,此时也只会把计算内存换出去,这样导致系统在20:06左右操作系统出现性能问题。

故障建议

基于上面分析,建议如下:

方案1:作为规避方案,把numperm_global修改为0,并重启生效。

方案2:为了彻底解决early paging的问题,IBM在AIX 6.1 TL09 SP01版本中发布了补丁IV44998。在此种情况下,建议升级操作系统并启用numperm_global参数来达到优化内存的分配机制的目的。

方案3:将Oracle SGA使用的内存指定为16MB页面,从而避免大量的64KB 页面被PIN。

方案4:将Oracle的LOCK_SGA参数改为FALSE,使其不PIN内存页面。

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值