细致入微:Oracle RAC DRM引起性能问题案例一则

熊军(老熊)

云和恩墨西区总经理

Oracle ACED,ACOUG核心会员

客户一套运行在Oracle 10.2.0.5 RAC上的系统,间歇性地出现性能问题。其性能现象为前台反映性能缓慢,从系统上看CPU利用率大幅增加,load增加。这种性能问题通常在出现几分钟后自动恢复正常。

从AWR中的TOP 5等待来看:

可以看到,TOP 5中,有3个是latch相关的等待,而另外2个则是跟RAC相关的等待。 如果再查看更细的等待数据,可以发现其他问题:

从上面的数据还可以看到,除了TOP 5等待,还有:

"gcs drm freeze in enter server mode“以及"gc remaster"

这2种比较少见的等待事件,从其名称来看,明显与DRM有关。那么这2种等待事件与TOP 5的事件有没有什么关联?。

MOS文档:

"Bug 6960699 - "latch: cache buffers chains" contention/ORA-481/kjfcdrmrfg: SYNC TIMEOUT/ OERI[kjbldrmrpst:!master] [ID 6960699.8]”

提及,DRM的确可能会引起大量的"latch: cache buffers chains"、"latch: object queue header operation"等待,虽然文档没有提及,但不排除会引起”latch: cache buffers lru chain“这样的等待。

为了进一步证实性能问题与DRM相关,使用tail -f命令监控LMD后台进程的trace文件。

在trace文件中显示开始进行DRM时,查询v$session视图,发现大量的 "latch: cache buffers chains" 、"latch: object queue header operation"等待事件,同时有"gcs drm freeze in enter server mode“和"gc remaster"等待事件,同时系统负载升高,前台反映性能下降。

而在DRM完成之后,这些等待消失,系统性能恢复到正常。

看起来,只需要关闭DRM就能避免这个问题。怎么样来关闭/禁止DRM呢?很多MOS文档提到的方法是设置2个隐含参数:

_gc_affinity_time=0 _gc_undo_affinity=FALSE

不幸的是,这2个参数是静态参数,也就是说必须要重启实例才能生效。 实际上可以设置另外2个动态的隐含参数,来达到这个目的。按下面的值设置这2个参数之后,不能完全算是禁止/关闭了DRM,而是从”事实上“关闭了DRM。

_gc_affinity_limit=250 _gc_affinity_minimum=10485760

甚至可以将以上2个参数值设置得更大。这2个参数是立即生效的,在所有的节点上设置这2个参数之后,系统不再进行DRM,经常一段时间的观察,本文描述的性能问题也不再出现。

下面是关闭DRM之后的等待事件数据:

那么什么是DRM?DRM对系统来说有什么好处?下面的文档已经描述得比较清楚,有兴趣的朋友可以参考:

  • MOS文档:DRM - Dynamic Resource management [ID 390483.1]

DRM简单来说就是Oracle根据数据块的访问来动态调整管理数据块的主节点,这项技术在引入之初引发了一系列的性能问题。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-04-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏進无尽的文章

工具篇-统计Crash的工具Crashlytics使用指南

按照官网里的步骤你基本上一步一步来就可以完成 Crashlytics集成到项目中了。 我在集成的时候遇到了一些问题:

1551
来自专栏沈唁志

博客开启HTTPS

2096
来自专栏FreeBuf

利用Pentestbox打造MS17-010移动杀器

1、前言 前段时间Shadow Broker披露了 Windows大量漏洞,甚至爆出黑客组织 Equation Group 对于Windows 远程漏洞 MS1...

3217
来自专栏大数据学习笔记

Kafka基本架构介绍

1、什么是消息系统? 消息系统负责将数据从一个应用程序传输到另一个应用程序,因此应用程序可以专注于数据,但不担心如何共享它。 分布式消息传递基于可靠消息队列的概...

1.7K8
来自专栏企鹅号快讯

Python的开端

今天就说说Python的安装和它的开发环境,我安装的是Python3.5.2,也有很多人用的Python2.7,这两个版本有些地方都变了,但是差异可以学了Pyt...

2036
来自专栏木子昭的博客

Google在线深度学习神器Colab1. Colab 执行终端命令2. 用Colab编写在线爬虫,并在线展示成果3.在线机器学习,决策树案例 - 泰坦尼克乘客存活状况 4. 在线学习Python编程

Colab是google最近推出的一项Python在线编程的免费服务, 有了它,不学Python编程的理由又少了一个 Colab环境已经集成了流行的深度学习...

5524
来自专栏北京马哥教育

4个Linux服务器监控工具

下面是我想呈现给你的4个强大的监控工具。 htop – 交互式进程查看器 你可能知道在机器上查看实时进程的标准工具top。如果不知道,请运行$ top看看,运行...

3529
来自专栏FreeBuf

如何逆向破解HawkEye keylogger键盘记录器,进入攻击者邮箱?

这一切要从一次恶意邮件攻击活动开始。下图为我们最近监测到的一个以恶意文件为发送附件的邮件攻击,请注意邮件信息中的英语写作水平是多么差劲,其实,这也是恶意邮件的一...

2358
来自专栏MYSQL轻松学

Mysql Group Replication介绍

一、Mysql Group Replication简介 Mysql Group Replication(MGR)是一个全新的高可用和高扩展的MySQL集群服务...

5974
来自专栏解Bug之路

解Bug之路-记一次JVM堆外内存泄露Bug的查找 顶

JVM的堆外内存泄露的定位一直是个比较棘手的问题。此次的Bug查找从堆内内存的泄露反推出堆外内存,同时对物理内存的使用做了定量的分析,从而实锤了Bug的源头。笔...

914

扫码关注云+社区