Oracle中的PGA监控报警分析二(r12笔记第87天)

今天又收到了一条报警的信息,看起来很常规,但是后面的故事如果你做了分析就会发现其实本身并不平常,我觉得我得出手了。

ZABBIX-监控系统:
------------------------------------
报警内容: PGA Alarm on alltest
------------------------------------
报警级别: PROBLEM
------------------------------------
监控项目: PGA:9723.2
------------------------------------

问题原因简单分析

为什么PGA会占用如此大的内存空间,根据分析是imo相关的进程,但是in
memory是否正式在环境中使用了,没有,所以这个问题就变得有些诡异了,这里还要牵扯出12c里对于pga的一个新增参数pga_aggregate_limit,这个算是一个硬指标,不能超过它的值,防止一些异常的情况发生。而问题的愿意其实也很特别,是12c中的一个bug,解决方法要么就是升级到12.2要么就是打上补丁,对于线上,测试环境等都有一定的实践难度,我还是选择来干脆关掉imo,把隐患解除,俗话说重启大法好,别以为重启就是一个体力活,你来体会一下这个过程。

重启问题1

  因为应用设置了自动重连,为了让这个问题处理得更平滑下,整个重启的过程本来以为会很快,但是却接二连三的碰到了不少的小问题。

  首先就是一系列fork错误。我干了什么呢?

  就是shutdown immediae   然后startup

  这么一个操作本身有问题吗,显然没有,但是启动数据库之后,我在另外一个窗口中使用su - oracle切换的时候却抛出了下面的错误。大体是这两类:

# su - oracle
-bash: fork: retry: Resource temporarily unavailable
-bash: fork: retry: Resource temporarily unavailable
^C-bash: fork: retry: Resource temporarily unavailable
或者

# su - oracle
su: cannot set user id: Resource temporarily unavailable

而问题的原因竟然是设置的内核参数的问题,说超过了1024之后会有这类问题。我的是oracle用户,这个地方对应的就是1024

# cat /etc/security/limits.d/90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     1024
root       soft    nproc     unlimited

  但是数据库层面的会话数只有不到200个,为什么进程数还会超过1000,这个让我有些不解,但是解决问题为先,就先修改了内核参数之后看看是否修复了问题。

   从测试来看,这个内核参数导致的su问题告一段落,看到应用层面的连接数也进来了。

    

重启问题2

  但是紧接着就发现哪里不太对劲,就是从客户端新发起的连接都有问题,orabbix端的监控也受到了影响。错误看起来就很诡异了。

$ sqlplus  pdb_mgr/xxxx@actvdb
SQL*Plus: Release 12.1.0.2.0 Production on Tue Jun 6 22:47:55 2017
Copyright (c) 1982, 2014, Oracle.  All rights reserved.
ERROR:
ORA-12518: TNS:listener could not hand off client connection

所以问题还绕不过去,看来连接数有些异常,系统层面总共有1200多个进程。

$ ps -ef|wc -l
1223   

 ora相关的进程有近1040个。

$ ps -ef|grep ora|wc -l
1040

按照关键字oracle得到的进程又930个。

$ ps -ef|grep oracletestdb|wc -l
930

而数据库层面的会话数只有不到200个,那么这多出来的进700多个进程到底是哪里的。

而这一点也是解决这个问题的一个关键。

重启问题3

 所以这个时候就碰到了第3个问题,我需要彻底的确认一下重启前后是否在系统层面有进程异常。我得把这个问题先解决清楚,使用shutdown immediate竟然卡住了,久久没有反应,后台日志也没有什么输出。

  我在确认了Data Guard没有问题的情况,果然使用shutdown abort来结束了这个异常的服务,然后确认ora相关的进程数,确认没有问题之后继续启动数据库,这一次来看总算是恢复了正常。

$ ps -ef|grep oracle|wc -l
334

问题解决后的收益

  这个问题在解决之后,对比PGA的使用情况,原来的问题就得到了根治。

有两个问题需要说明,到底是重启前进程数就接近1000还是重启后才达到1000的。

这个图就很明显,是一个系统层面的进程数情况,可以看到进程数是在重启之后突然升上来的,后来经过我的镇压,降下去了。证明在重启前的进程数其实是没有问题的。

第二个问题是PGA的使用情况,是否达到了预期的结果。这是PGA的监控结果,单位是M,可以看到重启之后没有了imo的副作用,PGA的指标一下子降下来了。

我想这个问题在很长的一段时间里都不会再出现了。

时间: 2024-07-30 05:42:25

Oracle中的PGA监控报警分析二(r12笔记第87天)的相关文章

Oracle中的PGA监控报警分析(r11笔记第97天)

最近接到一个数据库报警,让我颇有些意外,这是一个PGA相关的报警.听起来感觉是应用端的资源调用出了问题. 报警内容大体如下: 报警内容: PGA Alarm on alltest ------------------------------------报警级别: PROBLEM ------------------------------------监控项目: PGA:6118.6 这是一个12cR1的环境,是一套测试环境,确切的说是多套环境整合后的一套大的测试环境,里面含有近8个PDB,也就是

Oracle数据库重启后密码失效的问题(r12笔记第91天)

  前几天,我和系统运维的同事处理一个看似诡异的问题,他找到我说应用服务器启动的时候报了DB的Error,但是错误信息有限,他也没法完全定位到错误的原因,所以就希望我来帮忙看看这个问题是怎么回事,怎么解决.    从应用服务启动的日志来看,错误信息是连接池的地方有了问题. Error: 2017-06-09 10:04:59 init connpool:one or more conn open error. Error: 2017-06-09 10:12:50 init connpool:on

Oracle闪回原理测试(三)(r12笔记第16天)

 对于Oracle的闪回,很多朋友也问过问,到底是怎么玩的?如果自己做过一些闪回数据库的操作,就会发现这个功能非常强悍.   Flashback DML的操作其实还蛮容易理解的,但是Flashback DDDL那可就是另外一个level了,我们大概了解一下MySQL里面的闪回就会发现,真要实现无缝的全闪回,确实有很多的细节和场景需要考虑.而Oracle作为一个成熟的商业软件,是不希望我们了解很多底层的细节的,用着好就行,所以如果你想得到一些闪回更细节的东西,这个渠道就非常的窄,我们之前也测试了两

Webkit中HTML5 Video的实现分析 (二) - MediaPlayerFactory & RenderVideo的绘制操作

MediaPlayerFactory MediaPlayerFactory像是一个解码库一样,初始化时,各个可用的播放器(MediaPlayerPrivate)向它注册.当需要解码时,由它给出一个合适的播放器(呼叫MediaPlayerPrivate::constructor,即MediaPlayerPrivate::create)创建一个实例[由MediaPlayer:: loadWithNextMediaEngine执行]).所以MediaPlayer与MediaPlayerPrivate应

MySQL中的批量初始化数据的对比测试(r12笔记第71天)

  一直以来对于MySQL的存储过程性能还是颇有微词的,说实话够慢的.有时候想做一些对比测试,存储过程初始化几万条数据都得好一会儿,这功夫Oracle类似的测试早都做完了,今天就赶个晚班车,把这个没做完的任务完成了.     我大体测试了一下,以100万数据为基准,初始化性能的提升会从近8分钟提升到10多秒钟.      我自己尝试了以下4种方案.      1.存储过程批量导入(近8分钟)      2.存储过程批量导入内存表,内存表导入目标表(近5分钟)      3.使用shell脚本生成

Webkit中HTML5 Video的实现分析 (一) - 基本结构及HTMLMediaElement & MediaPlayer

以下为针对Webkit中HTML5 Video实现原理的分析和学习总结.至于其中的UML图档,可以到下面的github链接中下载. 首先预览一下Webkit中和Video相关的主要的类的层次结构: 其中主要的类为HTMLMediaElement, MediaPlayer以及RenderVideo(左下角). HTMLMediaElement代表了DOM结点,其继承关系可以追溯到Node,也就是DOM的结点.网页中Video/Audio元件的解析就是由它的创建开始.JavaScript的视频操作A

Webkit中HTML5 Video的实现分析 (三) - MediaPlayer & MediaPlayerPrivate的生命周期

明确主要类的生命周期有助于更好理解Webkit中视频的工作流程.下图展示了类间的引用关系. 如HTMLVideoElement与一个MediaPlayer对应,MediaPlayer与MediaPlayerPrivate一一对应,它们都是一个组合关系,当所有者自身被析构时,会自动释放引用的实例.这个过程都是使用OwnPtr智能指针来实现的.   OwnPtr赋值操作的代码:        OwnPtr& operator=(std::nullptr_t) { clear(); return *t

Oracle中获取执行计划的几种方法分析

以下是对Oracle中获取执行计划的几种方法进行了详细的分析介绍,需要的朋友可以参考下   1. 预估执行计划 - Explain PlanExplain plan以SQL语句作为输入,得到这条SQL语句的执行计划,并将执行计划输出存储到计划表中. 首先,在你要执行的SQL语句前加explain plan for,此时将生成的执行计划存储到计划表中,语句如下: explain plan for SQL语句然后,在计划表中查询刚刚生成的执行计划,语句如下: select * from table(

Oracle数据库安全策略分析(二)_oracle

正在看的ORACLE教程是:Oracle数据库安全策略分析(二). SQL*DBA命令的安全性: 如果您没有SQL*PLUS应用程序,您也可以使用SQL*DBA作SQL查权限相关的命令只能分配给Oracle软件拥有者和DBA组的用户,因为这些命令被授予了特殊的系统权限. (1) startup (2) shutdown (3) connect internal 数据库文件的安全性: Oracle软件的拥有者应该这些数据库文件($ORACLE_HOME/dbs/*.dbf)设置这些文件的使用权限为