2016년 7월 11일 월요일

EXADATA X5-2 Performance Test Network Issue

Symptom
성능테스트 부하를 실행 했을 시 1번 노드의 SQL 트래픽이 정상 유입량의 절반 수준으로만 처리됨.
동일한 트래픽을 2번 노드에서만 실행했을 시에는 정상 수준으로 처리됨.
네트웍 트래픽도 양쪽 노드를 비교 했을 시 1번 노드가 현저히 낮은 상태.
양쪽 노드의 AWR 리포트 비교했을 시 1번 노드에서만 네트워크 관련 대기 이벤트가 높게 나타남.
1번 노드에 뭔가 문제가 있는 것으로 판단.

DB Node1 QPS 및 네트워크 모니터링
DB Node2 QPS 및 네트워크 모니터링
AWR Report




Cause
1번 노드의 네트웍카드 설정이 100Mb/s 로 되어 있음. (2번 노드는 1000 Mb/s)
100Mb/s 로 잡힌 이유는 public switch 와 통신 시 auto negotiation 과정에서 네트웍 속도를 결정하는데 몇번의 서버 리붓 과정에서 100Mb/s 로 잡힌 것이었다.
네트웍 카드와 스위치가 모두 1000Mb/s를 지원하면 보통은 1000Mb/s 로 된다고 하는데 100Mb/s 로 잡힌 명확한 이유는 알 수 없다. (네트웍인프라에서는 간혹 있는 일이라 함)

[EXA]root@dbnode1:/root# ethtool eth1
Settings for eth1:
        Supported ports: [ TP ]
        Supported link modes:   100baseT/Full
                                1000baseT/Full
                                10000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Ye s
        Advertised link modes:  100baseT/Full
                                1000baseT/Full
                                10000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Du plex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: external
        Auto-negotiation: on
        MDI-X: Unknown
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes
[EXA]root@dbnode1:/root#
[EXA]root@dbnode1:/root# ethtool eth2
Settings for eth2:
        Supported ports: [ TP ]
        Supported link modes:   100baseT/Full
                                1000baseT/Full
                                10000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  100baseT/Full
                                1000baseT/Full
                                10000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: external
        Auto -negotiation: on
        MDI-X: Unknown
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes



Solution
ethtool 명령어로 1000Mb/s 로 적용하고 성능테스트 진행하였고 정상 QPS 트래픽 유입 확인.
eth1, eth2 는 본딩으로 이중화 구성되어 있으므로 둘다 적용.

[EXA]root@dbnode1:/root# ethtool -s eth1 speed 1000 duplex full autoneg on
[EXA]root@dbnode1:/root# ethtool -s eth2 speed 1000 duplex full autoneg on
[EXA]root@dbnode1:/root#
... 약 1분뒤 적용됨...
[EXA]root@dbnode1:/root# ethtool eth1
Settings for eth1:
        Supported ports: [ TP ]
        Supported link modes:   100baseT/Full
                                1000baseT/Full
                                10000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: external
        Auto-negotiation: on
        MDI-X: Unknown
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes
[EXA]root@dbnode1:/root#
[EXA]root@dbnode1:/root# ethtool eth2
Settings for eth2:
        Supported ports: [ TP ]
        Supported link modes:   100baseT/Full
                                1000baseT/Full
                                10000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: external
        Auto-negotiation: on
        MDI-X: Unknown
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

이런 위험을 방지하기 위해 자동이 아닌 강제(autoneg off) 로 1000Mb/s를 지정하려고 했으나 Exadata DB서버상에는 강제할 수 없었다. 

[EXA]root@dbnode1:/root# ethtool -s eth2 speed 1000 duplex full autoneg off
Cannot set new settings: Invalid argument
  not setting speed
  not setting duplex
  not setting autoneg

Oracle Linux 6: Network Limitation of a 1GB Card over Auto Negotiation (Doc ID 1904433.1)
"According to IEEE 802.3-2002 specification, you can not disable auto negotiation when using a 1000baseT NIC"

만약의 경우를 대비해서 스위치에만 autoneg off 로 강제지정하였고 리붓시에도 제대로 적용되도록 DB서버 모두 아래와 같이 ETHTOOL_OPTS 설정을 추가 함.

[EXA]root@dbnode1:/root# cat /etc/sysconfig/network-scripts/ifcfg-eth1 | grep ETHTOOL_OPTS
ETHTOOL_OPTS="speed 1000 duplex full autoneg on"
[EXA]root@dbnode1:/root# cat /etc/sysconfig/network-scripts/ifcfg-eth2 | grep ETHTOOL_OPTS
ETHTOOL_OPTS="speed 1000 duplex full autoneg on"

[EXA]root@dbnode2:/root# cat /etc/sysconfig/network-scripts/ifcfg-eth1 | grep ETHTOOL_OPTS
ETHTOOL_OPTS="speed 1000 duplex full autoneg on"
[EXA]root@dbnode2:/root# cat /etc/sysconfig/network-scripts/ifcfg-eth2 | grep ETHTOOL_OPTS
ETHTOOL_OPTS="speed 1000 duplex full autoneg on"



Conclusion
Exadata 와 상관 없이 외부스위치 설정으로 인해 네트웍 속도가 결정될 수 있다.
Exadata는 고가이고 훌륭한 DB 어플라이언스 제품이지만 성능테스트로 꼼꼼하게 확인할 필요가 있다.
SQL 처리량이 Product 에서 캡쳐한 시점과 차이가 많이 나면 꼼꼼하게 확인하여 원인 분석 하자.