#DevOps

평균 CPU는 여유로운데, 커밋은 왜 느릴까?

평균 CPU는 여유로운데, 커밋은 왜 느릴까?
01

Summary

평균 CPU 사용률 36.6% → 17.4%! 하드웨어 배치 하나로 DB 커밋 병목을 해결한 토스증권 DBA 이야기

평균 지표 뒤에 숨어 있던 NIC 인터럽트 병목을 발굴하고 4소켓 서버의 하드웨어 배치를 재설계한 극적인 성능 개선기

토스증권 DBA 팀은 전체 시스템 지표가 정상임에도 간헐적으로 발생하는 Oracle DB 커밋 지연 원인을 추적했습니다. 백그라운드 프로세스(LGWR)와 네트워크 인터럽트(NIC IRQ)가 동일한 CPU 코어에서 경합을 벌이고 있음을 밝혀내고, 랜카드 슬롯 물리 이동과 Active-Active 본딩 조치를 통해 리소스 효율과 SQL 수행 시간을 획기적으로 개선했습니다.

  • 01pidstat 및 /proc/interrupts 스냅샷 분석을 통한 코어 단위 핀포인트 병목 추적
  • 024소켓 NUMA 아키텍처 환경에서 Active-Standby 본딩이 특정 소켓에 부하를 집중시키던 원인 규명
  • 03하드웨어 랜카드 슬롯 이동과 Active-Active 본딩을 통한 인터럽트 처리 분산
  • 04인터럽트 불균형 지표인 Gini 계수를 0.80에서 0.67로 개선
  • 05동시접속자 28% 증가에도 개장 10분간 CPU 사용률을 36.6%에서 17.4%로 50% 이상 절감

RECOMMENDATION

평균 CPU 사용률은 낮지만 간헐적 Latency 스파이크를 겪고 있는 대용량 트랜잭션 시스템 운영자 및 DBA에게 강력 추천합니다. 소프트웨어 설정 이전에 CPU 소켓, NIC 슬롯, IRQ 할당 등 하드웨어/OS 하위 레이어 분석의 중요성을 잘 보여줍니다.

The Problem

Oracle DB 호스트의 평균 CPU 사용률 등 주요 지표는 정상 범위였으나, 0.1초 이상의 커밋 대기(log file sync) 현상이 지속적으로 발생하여 API 응답 지연을 유발했습니다.

The Solution

pidstat 및 /proc/interrupts를 통해 특정 CPU 코어에 LGWR 프로세스와 NIC 인터럽트 처리가 함께 몰려 발생하는 경합을 추적해냈습니다. 이를 해결하기 위해 인터커넥트 NIC 카드 2장을 서로 다른 CPU 소켓 슬롯에 재배치하고 Active-Active 본딩으로 전환하여 인터럽트를 여러 소켓으로 분산시켰습니다.

The Result

0.1초 이상의 커밋 대기 현상이 대부분 개선되었으며, 동시 접속자가 28% 증가한 환경에서도 개장 직후 10분간 CPU 사용률이 36.6%에서 17.4%로 대폭 감소했습니다.

Trade-off

소프트웨어 패치나 단순 OS 설정 변경이 아닌 물리적인 서버 하드웨어 카드 슬롯 재배치와 네트워크 본딩 구성 변경을 위한 작업 공수 및 점검 시간이 필요했습니다.

03

Key Concepts

Concept · 01

LGWR 및 log file sync

Oracle DB에서 트랜잭션 커밋 시 변경사항인 리두 로그를 디스크에 기록하는 백그라운드 프로세스(LGWR)와, 세션이 이 기록 완결을 기다리는 대기 이벤트(log file sync)입니다.

  • LGWR 지연 시 모든 세션의 커밋 처리가 함께 멈추는 병목 현상이 발생함
  • 특정 28번 CPU 코어에서 LGWR가 실행될 때만 커밋 대기가 심화되는 패턴을 발견함
Concept · 02

NUMA 및 NIC 인터럽트 경합

멀티 소켓 CPU 구조에서 하드웨어 장치의 IRQ(인터럽트) 요청이 커널에 의해 최우선 처리되어 일반 프로세스의 Executing을 밀어내는 현상입니다.

  • Active-Standby 본딩 NIC가 특정 소켓의 물리 코어들에만 인터럽트를 집중 전달함
  • 인터럽트 처리가 최우선 순위로 실행되며 같은 코어의 LGWR 프로세스가 일시 정지되는 문제 발생
Concept · 03

Active-Active 본딩 및 인터럽트 분산

복수의 네트워크 카드를 묶어 다중 경로 트래픽 처리와 고가용성을 동시에 확보하는 네트워크 래핑 기술입니다.

  • 2장의 NIC 카드를 물리적으로 서로 다른 소켓 슬롯으로 변경 배치함
  • Active-Active 본딩 전환을 통해 네트워크 인터럽트 부하를 두 소켓의 코어들로 균등 분산시킴