原题:Oracle数据库重启(内存参数numperm_global相关)

故障描述

Oracle数据库发生重启。

系统环境

AIX 6100-07-05-1228

Oracle 11g

故障分析

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

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

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

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

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

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

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

为了优化内存的管理,在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内存页面。

【编辑推荐】

【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0

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

  1. linux数据库实例开机启动,Oracle数据库之Linux下实现Oracle数据库单实例开机自启动设置...

    本文主要向大家介绍了Oracle数据库之Linux下实现Oracle数据库单实例开机自启动设置,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 步骤思路: 1:查看ORACLE_ ...

  2. 在数据仓储的情况下进一步封装数据库基础操作,此版本为异步版本

    1 /// <summary> 2 /// 在数据仓储的情况下进一步封装数据库基础操作,此版本为异步版本 Created by ZhangQC 2016.08.17 3 /// </ ...

  3. 在不重启Linux服务器的情况下在线识别新添加的磁盘

    前言  在我们使用 Linux系统的过程中,有时会因为初始时磁盘空间的分配不足,使用中途需要将挂载点扩容的情况,这时候就需要我们挂载新的磁盘到服务器上,但是如果我们在 Linux 运行过程中挂载新磁盘 ...

  4. Oracle Linux 6 3下安装Oracle 11g R2 11 2 0 3

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本文主要描述了在O ...

  5. 秒杀系统并发情况下解决超卖问题

    非分布式秒杀系统 并发情况下解决超卖问题 乐观锁防止超卖 / 令牌桶限流/ redis缓存 /接口限流/接口加盐/单用户限制访问频率/消息队列异步处理订单 #数据库表drop table if exi ...

  6. 正规方程法在矩阵不可逆的情况下解决办法

    正规方程法在矩阵不可逆的情况下解决办法: 数据中有多余的特征 例如数据中有两组特征是线性相关的,此时需要删除其中一组特征. 特征数大于样本数 删除部分特征数据

  7. 87-Python_某电商平台上销售不同规格包装、不同价格的水笔。编写程序,在不考虑运费的情况下,从键盘分别输人两种水笔的包装和价格,分别计算单根水笔的价格,根据价格就低原则打印输出选择购买哪种产品

    某电商平台上销售不同规格包装.不同价格的水笔.编写程序,在不考虑运费的情况下,从键盘分别输人两种水笔的包装和价格,分别计算单根水笔的价格,根据价格就低原则打印输出选择购买哪种产品. def choic ...

  8. 最优装载问题(将一批集装箱装上一艘载重为轮船,其中集装箱i的重量为Wi(0<=i<=n-1) 最优装载问题是指在装载体积不受限制的情况下,求使得集装箱数目最多的装载方案 )

    最优装载问题是将一批集装箱装上一艘载重为轮船,其中集装箱i的重量为Wi(0<=i<=n-1) 最优装载问题是指在装载体积不受限制的情况下,求使得集装箱数目最多的装载方案 e.g: 设有重量 ...

  9. ITSM-CMDB数据库设计-四种方案任你选

    ITSM-CMDB数据库设计-四种方案任你选 来源 http://kiral.javaeye.com/blog/789467 最近在做CMDB的数据库设计方案,有4种方案,各有利弊,我选方案3,大家可 ...

最新文章

  1. R语言dplyr包排序及序号函数实战(row_number、ntile、min_rank、dense_rank、percent_rank、cume_dist)
  2. 【CentOS 7笔记35】,几个特殊符号和一些常用命令#
  3. C#生成唯一的字符串或者数字
  4. 查出引起死锁的进程和SQL语句
  5. stm32之ADC应用实例(单通道、多通道、基于DMA)
  6. java获取用户地理位置_java web 通过ip获取当前地理位置
  7. Metasploit Framework命令汇总
  8. 配置java时找不到匹配项,检索项目的父项时出错:找不到与给定名称匹配的资源...
  9. 苹果喊你升!iOS 15.4支持戴口罩解锁 新增“怀孕男人”表情 网友:不要男妈妈...
  10. 深度学习与 Spark 和 TensorFlow
  11. C++ 中 Windows 编程概述
  12. Linux下安装人大金仓数据库说明
  13. Word批量调整插入图片大小
  14. 公司英文名称及部门大全
  15. Grafana-reporter定时报表
  16. 揭秘Internet.org:这是扎克伯格的野心还是使命?
  17. WiFi辐射比手机电脑辐射数值小 60厘米外基本为0
  18. 产品思考 - 小米的机会
  19. Qt实现的红色警戒3修改器
  20. 怎么都说新消费不行了?

热门文章

  1. 高斯过程回归(GPR)—— 数学推导
  2. 区块链BaaS云服务(14)华大BGI区块链“概论“
  3. C++ Primer 5th笔记(10)chapter10 泛型算法 : read
  4. ajax简单实战例子
  5. java元婴期(19)----java进阶(spring(3)----AOP相关概念实现方式)
  6. 初等数论--同余--Fermat素性检测算法(为什么每次概率改变1/2)
  7. buu [HDCTF2019]basic rsa
  8. [ARM异常]-SPIs(共享中断)routing到指定CPU的方法
  9. optee中的中断处理详解
  10. 使用递归的方式实现简易的二分法