oracle错误1327,Oracle中的PGA监控报警分析(r11笔记第97天)

最近接到一个数据库报警,让我颇有些意外,这是一个PGA相关的报警。听起来感觉是应用端的资源调用出了问题。

报警内容大体如下:

报警内容: PGA Alarm on alltest

------------------------------------报警级别: PROBLEM

------------------------------------监控项目: PGA:6118.6这是一个12cR1的环境,是一套测试环境,确切的说是多套环境整合后的一套大的测试环境,里面含有近8个PDB,也就是之前的多个测试环境整合而来。

所以我就简单进行了排查,首先这个报警是怎么来的,是在Orabbix配置的监控项。

在Zabbix中查看,可以看到这个报警的相关配置。

({Template_Oracle_OLTP:pga.last(0)}*100/{Template_Oracle_OLTP:pga_aggregate_target.last(0)})>95也就意味着PGA的使用率达到了95%以上的时候就触发报警,这里涉及两个监控项pga和pga_aggregate_target。

相关的SQL如下,监控项的SQL在Orabbix中是按照 【监控项】.Query的格式展现的。

pga_aggregate_target.Query=select

to_char(decode( unit,'bytes', value/1024/1024, value),'999999999.9')

value from V$PGASTAT where name in 'aggregate PGA target parameter'

pga.Query=select

to_char(decode( unit,'bytes', value/1024/1024, value),'999999999.9')

c对于这个问题,查看数据库参数,目前的pga设置是6GSQL> show parameter pga

NAME                TYPE      VALUE

----------------------- ----------- --------

pga_aggregate_limit     big integer 12880M

pga_aggregate_target    big integer 6440M但是看起来好像有些不大对劲,还有一个生疏的参数pga_aggregate_limit,这个参数是干什么的,其实这是12c中引入的一个参数,对于pga_aggregate_target的补充。怎么理解容易一些呢,pga_aggregate_target是一个基线值,比如设置为6G,如果PGA使用超过了6G还是很难做到管控,就可能导致一些hang,无响应的问题,这个问题在12c中是考虑引进了参数pga_aggregate_limit来完善的,也就是这个参数的值就是一个最终的大小,绝对不能超过。这个参数输出中,目前的limit值默认给设置为了12G,而原本设置的target值为6G.

目前的报警是PGA使用超过了阈值,那什么样的应用会导致如此的PGA使用情况呢,这个让我有些疑惑。一般来说,单个进程的PGA占用量其实不大,多点也就几十MB而已。当然为了先尽快修复这个问题,我把PGA target的值改为了7G.

然后我们可以直接这样尝试定位一下问题,看看占用PGA最多的进程是哪个,依次来排除。

SQL>  select max(pga_max_mem/1024/1024) from v$process;

MAX(PGA_MAX_MEM/1024/1024)

--------------------------

7989.28072结果看到最大进程怎么消耗如此之高,尽管是一个峰值而已。

SQL> select * from

(select

spid,pga_max_mem/1024/1024,pga_alloc_mem/1024/1024,pga_used_mem/1024/1024,program

from v$process order by pga_used_mem desc) where rownum<10;

输出的数据如下:

SPID   PGA_MAX_MEM PGA_ALLOC_MEM PGA_USED_MEM PROGRAM

--------- --------------------- ----------------------- -----------

941    7989.    7989.4  5061.54467 oracle@teststd.test.com (IMCO)

925    132    39.851   37.1080208 oracle@teststd.test.com (ARC0)

931    116    38.788   37.0642586 oracle@teststd.test.com (ARC3)

937    36.96    33.093    31.872448 oracle@teststd.test.com (W000)

9201   37.28    31.968   31.7101784 oracle@teststd.test.com (W00C)

1491   32.53    32.468   31.6490288 oracle@teststd.test.com (W001)

1327   33.90    31.968   31.6361275 oracle@teststd.test.com (W002)

8181   32.53    31.843   31.5896568 oracle@teststd.test.com (W009)

3510   32.78    32.093   31.5785789 oracle@teststd.test.com (W005)

这一下子让我有些懵,因为最大的进程竟然是IMCO,这是in memory选件的后台进程。

[oracle@teststd ~]$ ps -ef|grep 941

oracle     941     1  0  2016 ?        07:45:21 ora_imco_testdb这样一来问题就有些诡异了。

SQL> show sga

Total System Global Area 2.0267E+10 bytes

Fixed Size                  3721272 bytes

Variable Size            1.1409E+10 bytes

Database Buffers         6643777536 bytes

Redo Buffers               63385600 bytes

In-Memory Area           2147483648 bytes通过SGA的输出可以看出,In-Memory占用了大概2G的内存空间。

而且这个参数比较让人纠结的就是无法动态修改,在实例初始化阶段才可以修改。

SQL> alter system set inmemory_size=1G;

alter system set inmemory_size=1G

*

ERROR at line 1:

ORA-02097: parameter cannot be modified because specified value is invalid

ORA-02095: specified initialization parameter cannot be modified这样一个问题,难道是因为imco的特殊性导致了PGA的占用量大步提升,也被归纳算入了。实际上in memory自启用后就没有正式启用,没有任何表的数据放在IMO里,所以也排除了IMO的一些异常情况。还有一个验证的方式就是通过Data Guard来对比补充,结果查看备库的imco进程情况,压根诶呦发现什么问题。还有一个思路那就是对比其他的12c环境,是否也存在类似的问题,还有一套近期搭建的12cR2的环境,也启用了IMO,但是IMCO进程的PGA占用量很低。这也符合了一个常规的想法,那么这个问题是怎么造成的呢,我的一个直观感受就是一个bug.

这个想法在MOS上得到了一个基本的印证,可以参考

IMCO Background Process Keeps Growing in Memory Usage over Time (Doc ID 2106806.1)这里有一个问题需要确认,那就是IMCO的进程占用情况是逐步的增长还是一开始就很高。

这一点上完全可以通过Zabbix的监控图得到。

查看近一年的PGA变化曲线图,可发现是在逐步增长。

viewspace-2134887

所以和MOS里面的那个bug吻合度很高。

按照官方的解释,有3个途径可以改进这个问题。

1.  Upgrade to 12.2, when available.

2.  Apply the 12.1.0.2.10DBBP patch (or if you apply PSUs instead of DBBPs, apply the 12.1.0.2.160119DBPSU).

3. Apply interim Patch 19159120 for your RDBMS version and OS.目前来看,步骤2已经满足,只有重启一下,或者升级到12c了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python控制台清屏_Python Shell 怎样清屏?

启动Python有两种方式&#xff0c;分别为“Windows命令行窗口”和“IDLE” “命令行窗口”下可以通过如下两种方法&#xff1a; 1. import subprocess subprocess.call("clear") # linux/mac subprocess.call("cls", shellTrue) # windows 执行完次命令后&…

python卸载opencv包_Ubuntu16.04卸载opencv2.4.9并安装opencv3.2.0+contrib

本文为作者原创&#xff0c;转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃需要用到opencv中的surf和sift算法&#xff0c;机器上只有opencv3.2&#xff0c;没有扩展包&#xff0c;于是就去GitHub和官网看了下&#xff0c;没想到8月刚出了3.3&#xff0c;一个激动就想…

php函数内的循环,PHP 循环列出目录内容的函数代码

PHP 循环列出目录内容的函数代码复制代码 代码如下:function list_files($dir){if(is_dir($dir)){if($handle opendir($dir)){while(($file readdir($handle)) ! false){if($file ! "." && $file ! ".." && $file ! "Thumbs.db&quo…

python火柴人打架代码_python火柴人

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; 代码实现了一个火柴人&#xff0c;他开心时可以跳跃、可以舞蹈&#xff0c;不开心时可以躺地上... ?代码有…

spring boot admin 2.2 获取日志失败_SB实战20-Spring Boot的日志和报告

上篇我们学习了《SB实战19-Spring Boot的外部配置》&#xff0c;本篇我们学习Spring Boot的日志和报告。4 日志和报告4.1 日志日志是对应用运行时进行调试和分析的重要工具。Spring Boot使用SLF4J作为日志的API&#xff0c;Logback、Log4j2、Java Util Logging都可以作为日志提…

oracle树状排序,Oracle树状结构查询

oracle用表的形式组织数据&#xff0c;某些数据还呈现树状结构&#xff0c;提供了对这些数据的组织、查询等功能。在扫描树结构表时&#xff0c;要依次访问树中的每一个节点&#xff0c;并且每个节点只能访问一次&#xff0c;其步骤如下&#xff1a;1&#xff1a;从根节点开始2…

python numpy读取数据_大神教你python 读取文件并把矩阵转成numpy的两种方法

导读 今天小编就为大家分享一篇python 读取文件并把矩阵转成numpy的两种方法&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。一起跟随小编过来看看吧 在当前目录下&#xff1a; 方法1&#xff1a; file open(‘filename) a file.read() b a.split(‘\n)#使用…

datagrid wpf 获取选中_c# WPF DataGrid 获取选中单元格信息

private void Button_Click(objectsender, RoutedEventArgs e){DataGridCell cell dg.GetCell(1, 2);TextBlock tb cell.Content asTextBlock;Console.WriteLine(tb.Text);}public static classDataGridExtension{/// ///获取DataGrid控件单元格/// /// DataGrid控件/// 单元格…

redis哨兵高可用-源码篇

前段时间写过两篇redis哨兵的文章,一篇是redis哨兵模式的搭建。另外一篇是redis哨兵主从切换的原理,。 当时写的原理篇,是手动模拟主节点故障,然后查看主从切换的日志推算哨兵主从切换的流程。但是感觉这样搞出来的流程太粗&#xff0c;忽略了很多细节&#xff0c;真正要搞明白…

python获取网页数据对电脑性能_【Python】网页数据爬取实战

由于网页结构跟之前有变化&#xff0c;还不是很熟悉。代码待完善&#xff0c;问题记录&#xff1a;腾讯新闻二级网页内容爬取有问题。链家网站头文件没有用到。爬取一条腾讯视频的header内容&#xff0c;存入txt。要求&#xff1a;包含网页链接包含title包含所有headers信息imp…

python集合去重_python集合去重

[python中对list去重的多种方法 怎么快速的对列表进行去重呢&#xff0c;去重之后原来的顺序会不会改变呢&#xff1f; 1.以下的几种情况结果是一样的&#xff0c;去重之后顺序会改变: i [1,2,3,3,4,2,3,4,5,6,1] news_i [] for id in i: if id not in news_i: news_i.append(…

linux进程pid分配规则,Linux进程pid分配法【转】

一. 概述Android系统创建进程&#xff0c;最终的实现还是调用linux fork方法&#xff0c;对于linux系统每个进程都有唯一的 进程ID(值大于0)&#xff0c;也有pid上限&#xff0c;默认为32768。 pid可重复利用&#xff0c;当进程被杀后会回收该pid&#xff0c;以供后续的进程pid…

sqlserver date类型和字符串比较_基于SQL Server数据库搭建主从复制实现读写分离实战演练...

一、课程介绍读写分离(主从同步)从字面意思就可以理解&#xff0c;就是把对数据库的读操作和写操作分离开。读写分离在网站发展初期可以一定程度上缓解读写并发时产生锁的问题&#xff0c;将读写压力分担到多台服务器上。读写分离的基本原理是让主数据库处理事务性增、改、删操…

linux非标准头文件,Linux学习:unix的标准化的实现(Linux中各种限制-数据类型-各种标准化头文件介绍)...

作为Linux的前身&#xff0c;unix标准化是十分重要的。我在这里挑几个重要的点说明。1&#xff1a;Linux中各种限制。Linux中限制有编译时限制和运行时限制&#xff0c;另外有一些限制是由于我们的实现不同而不同&#xff0c;因此我们需要调用对应的函数获取对应的值不同。(eg&…

python怎么导入大小字母_python遍历小写英文字母的方法

python遍历小写英文字母的方法在c、c等语言中&#xff0c;可以用字符1的for循环来遍历小写的26个英文字母&#xff0c;但是由于python语言的特殊性&#xff0c;通过a 1这种代码并不能成功遍历&#xff0c;以下是在python中遍历英文字母的简洁代码&#xff1a;import stringfor…

51单片机怎么显示当前时间_(进阶篇)51单片机之按键控制蜂鸣器、数码管、按键值移位显示...

一、实操演示- 按键控制蜂鸣器1、图文详细独立按键硬件电路蜂鸣器硬件电路2、连接方式&#xff1a;J20的第3号引脚连接到J7引脚&#xff0c;即P15连接J7。J29的第7、8号引脚连接到JP1的第1、2号引脚&#xff0c;即P31连接k1&#xff0c;P30连接k2。下载程序后&#xff0c;观察现…

linux怎么运行g77,Linux安装g77编译器的技巧

在Ubuntu10.10系统中&#xff0c;g77已经被gfortran完全替代了&#xff0c;但并不能完全兼容过去的g77&#xff0c;这样就不能使用一些用977编译的程序了。所以我们只能自己再安装g77了。今天华军小编给大家展示的是Linux安装g77编译器的技巧&#xff0c;精心挑选的内容希望大家…

oracle 结果集已耗尽_java.sql.SQLException: 结果集已耗尽

编写了jsp谁能帮忙看下有什么问题编写了jsp 谁能帮忙看下 有什么问题技术交流ResultSet rsnull;String str"select publish_id,publish_name,publish_time,publish_text from comment_tb order by publish_time desc ";query.connect();rsquery.select(str);while(rs…

vs使用未初始化的内存怎么解决_遇到C语言内存错误怎么办?一定要找准这六个原因...

一、没有为指针分配内存定义了指针变量&#xff0c;但是没有为指针分配内存&#xff0c;即指针没有指向一块合法的内存。浅显的例子就不举了&#xff0c;这里举几个比较隐蔽的例子。1、结构体成员指针未初始化struct student { char *name; int score; }stu,*pstu; int main() …

linux服务器如何设置双网卡,linux服务器设置(双网卡共享上网)

一、网络拓补结构&#xff1a;服务器&#xff1a;两网卡的设置&#xff1a;eth0:202.96.168.100 掩码&#xff1a;255.255.255.0 网关&#xff1a;202.96.168.68 #与 Inte.Net 相联eth1:192.168.1.1掩码&#xff1a;255.255.255.0#与局域网相联客户机子网段&#xff1a;192.1…