[yoonnsshop] Database CPU 할당과 성능

yoonn·2024년 8월 19일

yoonnsshop

목록 보기
7/7
post-thumbnail

Intro

이번 포스팅에서는 wrk를 사용한 부하 테스트를 통해 Docker 컨테이너의 CPU 할당이 데이터베이스 성능에 미치는 영향을 분석합니다. 테스트 결과를 바탕으로 CPU 할당을 단계별로 조정하며, 이에 따른 전체 서비스 성능의 변화를 관찰하고 최적의 설정을 찾아가는 과정을 소개합니다.

Mac M2 Max, Docker desktop 환경에서 진행하였음

🍋 코드 링크

🔗 연관 포스트


Test

측정 대상

Mysql

  db:
    image: mysql
    ...
    deploy:
      resources:
        limits:
          cpus: # variable value
  • Docker 컨테이너로 실행
  • CPU limits : 가변(0.1 ~ 1.0 코어)

API 서버

  • yoonnsshop API 서버
  • 테스트 엔드포인트: /api/v1/orders/v5
  • 데이터베이스 작업 : 2번의 SELECT 쿼리
    - orders 조회: 3 milliseconds
    - order_items 조회: 8 milliseconds
  • 데이터베이스 연결 풀 설정(default): maximum-pool-size=10

테스트 조건

  • 모든 서비스와 테스트가 동일한 PC에서 실행되어 네트워크 지연 최소화

부하 테스트

사용된 명령어는 다음과 같습니다.

> wrk -t1 -c200 -d120s -R 10000 http://127.0.0.1:8080/api/v1/orders/v5

CPU limits 값을 0.1 ~ 1로 조정하며 테스트 한 결과 다음과 같은 결과값을 얻었습니다.

coresuccesstimeoutRPS
0.12051976817
0.23227865026
0.34951699641
0.5121911455101
1.03005492250.41

분석 및 결론

CPU 리소스와 성능 관계

  • MySQL 컨테이너에 할당된 CPU 코어 수 증가에 따라 전체 시스템의 RPS가 선형적으로 증가했습니다.
  • 1코어 할당 시 약 250 RPS의 안정적인 처리가 가능했습니다.

데이터베이스 준비 상태 (Hibernate prepare):

  • Hibernate prepare 상태의 쿼리가 지속적으로 약 2000개 유지되는 것이 관찰되었습니다. 이는
  • 이는 데이터베이스 연결과 쿼리 실행에 추가적인 오버헤드를 발생시킬 수 있습니다. (Hibernate Execution Time 값 확인)

리소스 제한의 영향

  • 낮은 CPU코어 할당 시 처리 시간 증가 및 타임아웃 발생 빈도가 증가했습니다.
  • 적절한 CPU 리소스 할당이 안정적인 서비스 제공에 중요함을 알 수 있습니다.

테스트의 한계 및 추가 고려 사항

본 테스트는 데이터베이스 컨테이너의 CPU 할당에 초점을 맞추어 진행되었습니다.

  • 단일 PC에서의 테스트로 인한 리소스 경합 가능성이 있어, 결과 해석에 주의가 필요합니다.
  • 데이터베이스 CPU 증가에 따른 애플리케이션 서버 부하 증가로 정확한 성능 측정에 한계가 있습니다.

향후 성능 최적화 및 테스트 시에는 다음 요소들을 추가로 고려할 수 있습니다.
1. 데이터베이스 연결 풀 사용 패턴 분석
2. 애플리케이션 로직 처리 시간 측정(데이터베이스 응답 대기 시간 포함)
3. 전체 시스템의 리소스 사용량 (CPU, 메모리, I/O 등) 모니터링

실제 운영 환경과 유사한 분산 환경에서의 테스트로 더 정확한 성능 특성을 파악할 수 있을 것으로 기대합니다.

이런 실험 과정을 통해 데이터베이스 컨테이너의 CPU 할당이 전체 시스템 성능에 미치는 영향을 확인했으며, 추가적인 성능 요소 분석의 필요성도 확인했습니다.

0개의 댓글