oracle10g RAC中,大量的gc cr block busy 等待是怎么回事?如何解决?

oracle10g RAC中,大量的gc cr block busy 等待是怎么回事?如何解决?,第1张

生产环境是RAC,Oracle10g,省级平台。

最近生产系统上,出现 gc buffer busy 的event,数据库变慢。

于是询问了一位老师,他给出了下面的解析:

他解析了一下 gc buffer busy 的原理,大致是,一个 *** 作使用数据块时,会锁住这个块,另外一个 *** 作就必须等待才能获得这个块的使用权。从我们系统看,他认为insert into veh_log的语句引起的不是TX锁,而是“gc buffer busy”这事件。他说,insert记录1的时候,占用了数据块A,这个时候,又进来一个insert记录2,也是放在数据块A上,这时就必须等待,产生“gc buffer busy”这事件。如果这个insert的表很大(表大不是影响插入速度问题,主要是如果这个表有N多索引,表大了索引也随之大了,插入就很慢),那么等待的时间更长。(这好像也解释了为什么数据量少的话,不会有 gc buffer busy ,因为记录1瞬间插完了,记录2才来)

至于解决方法,他不建议业务分流(主备机,我可能没有表达清楚给他听,我说一台是主机,只有这台宕了,才用备机),他说,业务分流很难掌控每个业务的负荷,稍有不慎,分配到主机的负荷大了,会有CPU,内存,IO等方面的连锁反应。

他的建议是对该表数据做复合分区,建本地分区索引。大致是按时间做范围主分区,管理部门做列举次分区,主键是全局索引,其他索引本地分区。这样的做法,记录1和记录2一般都会存储在不同的数据块,因此不会产生“gc buffer busy”这事件。(如果是记录1和记录2是同一时间段,同一管理部门则可能存放的数据块是一样的,不过这种情况已经降低了很多)。另外数据和索引分区后,也可以解决插入速度问题。本地分区索引相当于一个独立的索引,不存在大索引的节点分裂问题。

他说,分区后,数据量就不成问题了。

more...

http://www.database8.com/thread-298118-1-1.html

在Oracle RAC环境中,无论我们从AWR自动负载性能报告、Statspack或者Grid Control中都可以找到Oracle数据库软件所收集的全局缓存工作负载统计信息(global cache work load statistics);其中就包含了全局缓存块丢失(Global cache lost blocks)的统计信息(这些丢失的全局缓存块可能是gc cr block lost或者gc current block lost),若集群中的任意节点出现大量的全局缓存块丢失(下文简写为gc blocks lost),则可能意味着内联(private)网络存在问题或者packet网络包处理低效。通过监控和评估这些全局缓存的相关统计信息,可以有效保证内联全局缓存(interconnect Global Cache)和全局队列服务(Global Enqueue Service)(GCS/GES)以及整个集群的正常工作。全局缓存块丢失一般预示着网络包处理存在问题并需要进一步勘察。另外全局缓存块丢失(gc blocks lost)的问题常会伴随着gc cr multiblock waits等待发生(传输多个连续的数据块全局缓存)。

就目前来看最有嫌疑造成或加速gc blocks lost的”元凶”往往是因为错误地或者不当的配置了内联网络(interconnects)。接下来我们会进一步介绍如何找出造成gc blocks lost的原因。

虽然gc blocks lost对集群造成的影响更多的反应在性能方面,但我们也无法保证其没有造成节点/实例被驱逐(eviction)的可能性。Oracle Clusterware集群及Oracle RAC实例的节点成员管理依赖于内联网络的心跳(heartbeats)。假设在网络心跳持续丢失的情况下,节点/实例的驱逐可以发生。以下我们列出gc blocks lost可能造成的主次要症状:

主要症状:

‘gc cr block lost’或’gc current block lost’成为实例中Top 5的主要等待事件

次要症状:

SQL trace报告显示多次出现gc cr requests,gc current request等待事件

出现长时间的gc cr multiblock requests等待

糟糕的应用性能与吞吐量

ifconfig或其他网络工具显示存在大量的网络包packet发送接收(send/receive)错误

netstat报告显示存在errors/retransmits/reassembly等失败

单个或多个节点失败

由网络处理引发的异常CPU使用率

如果自己搞不定可以找ASKMACLEAN专业ORACLE数据库修复团队成员帮您恢复!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6767944.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存