ITPub博客

首页 > 数据库 > Oracle > 一次gc buffer busy问题的诊断

一次gc buffer busy问题的诊断

原创 Oracle 作者:space6212 时间:2019-06-02 14:27:05 0 删除 编辑
最近在做系统上线的性能测试,在测试过程中发现了一个与gc buffer busy相关的性能问题,经过一份周折,最终解决问题。

总体来说,这次测试的现象是有三个节点的压力正常,事务处理效率也正常,但另外一个节点事务处理能力很差,且系统负载根本上不去。

以下是解决过程。
[@more@]首先使用spawrrac.sql出一个RAC AWR报表,以下是关注的主要部分:

OS Stat
~~~~~~~
Num Load Load
Inst # CPUs Begin End % Busy % Usr % Sys % WIO % Idl Busy Time (s) Idle Time (s) Total time (s)
------ ---- ------ ------ ------ ------ ------ ------ ------ --------------- --------------- ---------------
1 64 34.1 28.0 34.7 31.2 2.3 19.6 65.3 159,990.51 301,169.36 461,159.87
2 64 2.3 3.4 2.7 1.9 .3 .0 97.3 12,428.21 448,726.00 461,154.21
3 64 30.1 19.6 27.7 24.7 1.8 19.2 72.3 127,564.55 333,594.01 461,158.56
4 64 46.3 30.3 36.0 32.0 2.8 19.8 64.0 165,966.72 295,197.09 461,163.81
--------------- --------------- ---------------
sum 465,949.99 1,378,686.46 1,844,636.45

这部分可以看到OS的负载情况,可以看到节点2负载非常低。

SysStat (Absolute Values)
~~~~~~~~~~~~~~~~~~~~~~~~~~

+--- Sessions --+ +------ Open Cursors -----+ +- Session Cached Cursors -+
I# Begin End Begin End Begin End
---- -------- -------- -------------- ------------ -------------- ------------
1 201 277 2,120 3,133 11,820 19,773
2 333 369 3,491 4,178 4,063 5,093
3 227 149 2,477 1,470 6,146 13,223
4 319 245 3,694 2,734 7,348 18,586
-------- -------- -------------- ------------ -------------- ------------
sum 1,080 1,040 11,782 11,515 29,377 56,675

从部分可以看到,节点2的active session最多。实际上给各个节点加的压力是差不多的,而节点2的活动会话这么多,说明它的处理速度慢,导致会话堆积比较多。
从另外的角度来说,活动会话多的节点反而空闲,说明整个事务处理流程在某一个地方被堵住了,出现瓶颈了,所以压力到不了OS这一层。
Avg
Wait %Time Total Wait Wait % of
I# Class Event Waits -outs Time(s) (ms) DB time
---- -------- ---------------------------------------- ---------- ------ ------------- ------- -------
1 Cluster gc buffer busy ########## .0 459,472.12 3.5 21.08
2 Cluster gc buffer busy 4,129,532 .0 1,848,007.80 447.5 88.76
3 Cluster gc buffer busy ########## .0 324,819.93 3.6 16.91
4 Cluster gc buffer busy ########## .0 532,179.32 3.8 17.58

看到这部分,基本就可以确定瓶颈在什么地方了:gc buffer busy 。造成这个等待的原因有很多,在这个例子中,因为测试数据和用例是一样的,但是平均等待时间差别上百倍,这个基本可以确定不是因为数据库导致的。
不是数据库原因的话,那这个等待与inter connect的效率关系最大,所以就开始怀疑是网络原因导致的。

在这个系统中,用于cache fusion的网络用的是两个万兆网卡绑定成一主一备的形式提供服务的。
首先看看网卡的绑定情况:

[oracle@dwdb01 ~]$ cat /proc/net/bonding/bond1
Ethernet Channel Bonding Driver: v3.4.0 (October 7, 2008)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth5
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth5
MII Status: up
Link Failure Count: 0
Permanent HW addr: d8:d3:85:a0:5c:4c

Slave Interface: eth7
MII Status: up
Link Failure Count: 0
Permanent HW addr: d8:d3:85:a0:4c:fc

dwdb01/03/04的绑定配置都一样,都是eth5是活动网卡,eth7是standby网卡。

[root@dwdb02 ~]# cat /proc/net/bonding/bond1
Ethernet Channel Bonding Driver: v3.4.0 (October 7, 2008)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth7
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth5
MII Status: up
Link Failure Count: 0
Permanent HW addr: d8:d3:85:a0:4c:6c

Slave Interface: eth7
MII Status: up
Link Failure Count: 0
Permanent HW addr: d8:d3:85:9f:9b:14

dwdb02和上面三台刚好相反,eth7是活动网卡,eth5是standby。而正好出问题的是dwdb02,到了这里,这个嫌疑就很大了。
接着咨询负责网络的同事,交换机也有两台同时提供服务的,这几个节点上的eth5接的是其中一台交换机,eth7接的是另外一台交换机,而交换机内的通信效率和交换机间的通信效率差别是很大的。
如果是这个原因的话,那把节点2的活动网卡改为eth5,让所有活动网卡在同一台交换机应该就可以解决问题了。

于是开始切换:
[root@dwdb02 ~]# ifdown eth7
[root@dwdb02 ~]# cat /proc/net/bonding/bond1
Ethernet Channel Bonding Driver: v3.4.0 (October 7, 2008)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth5
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth5
MII Status: up
Link Failure Count: 0
Permanent HW addr: d8:d3:85:a0:4c:6c
[root@dwdb02 ~]# ifup eth7
[root@dwdb02 ~]# cat /proc/net/bonding/bond1
Ethernet Channel Bonding Driver: v3.4.0 (October 7, 2008)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth5
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth5
MII Status: up
Link Failure Count: 0
Permanent HW addr: d8:d3:85:a0:4c:6c

Slave Interface: eth7
MII Status: up
Link Failure Count: 0
Permanent HW addr: d8:d3:85:9f:9b:14



通过停止、启动eth7,让网卡failover来实现切换。
切换后压力立马上去,gc buffer busy的等待时间也下降到与其他几台一样的水平,问题得到解决。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/231499/viewspace-1044221/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: RAC的VIP切换测试
请登录后发表评论 登录
全部评论

注册时间:2005-01-25

  • 博文量
    245
  • 访问量
    226943