안녕하세요 시스템신뢰성개발팀에서 DBA로 근무하고 있는 오윤택입니다.

오로라를 사용할때 그동안 로컬스토리지의 성능이슈로 인하여 구 모델인 R3 인스턴스를 사용해왔습니다. 최근 오로라에 R5 인스턴스가 추가된 만큼, 계속 R3 인스턴스를 사용하는게 맞는지 성능 테스트를 진행하여 결과를 공유합니다.

Aurora의 로컬 스토리지란?

Aurora는 아래와 같이 두가지의 스토리지를 사용합니다.

스토리지 타입 용도
클러스터 스토리지 Data File, BinLog, RedoLog
로컬 스토리지 임시테이블, 정렬, 그룹핑 쿼리, 각종 로그(error, slow, general)

Aurora(MySQL)는 정렬이나 그룹핑 등의 쿼리가 실행될 때 임시파일이 로컬 스토리지에 생성이 됩니다. 따라서 로컬 스토리지의 성능이 낮으면 쿼리의 수행시간이 오래걸리게 됩니다.

단, 컬럼 추가 등의 DDL작업에도 임시파일을 생성하는데 이때는 테이블이 위치한 클러스터 스토리지에 생성합니다.

로컬 스토리지는 인스턴스타입 간 아래와 같은 차이가 있습니다.

인스턴스 타입 디스크 타입 EBS 최적화
R3 SSD (호스트장비와 물리적으로 연결된 디스크) N
R4, R5 EBS (네트워크 디스크) Y

R3의 로컬스토리지가 SSD인 이유는 EBS 최적화 옵션이 지원되지 않아 좀더 빠른 처리를 위해 SSD를 사용했고 R4, R5 타입 부터는 EBS 최적화 옵션이 적용되어 로컬스토리지에 EBS를 사용합니다.

EBS 최적화 인스턴스

일반적으로 SSD가 EBS가 보다 빠르기 때문에, 우리도 R3타입을 주로 사용을 해왔습니다. 그러나 현재 R3타입은 매뉴얼에도 빠져있고 (oldest version을 찾아야 확인 가능), 최근 두 세대나 차이나는 R5타입이 출시된 만큼 정확한 성능테스트가 필요하였습니다.

로컬 스토리지의 디스크 타입과 상관없이 같은 워크로드에서 어떤 타입이 더 빠른지 확인 하였습니다.

테스트 시나리오

두가지 케이스로 테스트를 진행하였습니다.

  • 로컬 스토리지를 사용하는 쿼리(/temp 사용) 등을 선정하여 각 인스턴스 별로 실행후 실행시간을 비교
  • sysbench를 이용하여 qps(초당 쿼리 처리량) 비교

인스턴스 타입

  • r3.xlarge (4Core / 30.5GB / 5.7.mysql_aurora.2.03.4)
  • r4.xlarge (4Core / 30.5GB / 5.7.mysql_aurora.2.03.4)
  • r5.xlarge (4Core / 32GB / 5.7.mysql_aurora.2.02.5)
    • R5 타입은 현재 5.7.mysql_aurora.2.03.3 까지만 지원하여 2.02.5 버전에서 테스트한 결과입니다.

로컬 스토리지 테스트 (temp 디렉토리 사용)

테스트 환경

  • 테이블
    • Rows : 약 2900만
    • 사이즈 : 약 2.3GB
  • 쿼리
      ## Sorting
      select SQL_NO_CACHE * 
      from orders1 
      order by o_d_id desc 
      limit 50000;
    
      ## Grouping
      select SQL_NO_CACHE o_carrier_id, o_d_id, o_w_id, count(*) 
      from orders1 
      group by o_carrier_id, o_d_id, o_w_id 
      order by 4 desc;
    
      ## Temporary Table
      create temporary table zzz__temp as 
      select SQL_NO_CACHE * from orders1;
    

로컬 스토리지 테스트 결과

R5 > R4 > R3 순으로 성능이 우수하며, 특별히 로컬 스토리지의 위치에 따른 성능저하는 없습니다.

로컬스토리지 결과 (수치가 낮을수록 성능이 좋습니다.)

  • Sorting
    • R3 vs R4 : 약 28% 가량 R4 가 더 우수함
    • R3 vs R5 : 약 49% 가량 R5 가 더 우수함
    • R4 vs R5 : 약 16% 가량 R5 가 더 우수함
  • Grouping
    • R3 vs R4 : 약 16% 가량 R4 가 더 우수함
    • R3 vs R5 : 약 47% 가량 R5 가 더 우수함
    • R4 vs R5 : 약 26% 가량 R5 가 더 우수함
  • Temporary Table
    • R3 vs R4 : 약 93% 가량 R4 가 더 우수함
    • R3 vs R5 : 약 149% 가량 R5 가 더 우수함
    • R4 vs R5 : 약 28% 가량 R5 가 더 우수함

sysbench 테스트 (qps, latency 테스트)

테스트 환경

  • 버전 : sysbench 1.0.15 tpcc
  • 스레드 : 2, 4, 8, 16, 24, 32 개로 단계적으로 늘림
  • 테스트 시간 : 300초
  • 데이터 : 10tables, 100scale -> 약 90GB

sysbench 테스트 결과

R5 > R4 > R3 순으로 성능이 우수하였습니다.
특히 R5인스턴스는 기존 R3보다 최대 60%이상 높은 성능을 보였습니다.

  • R3 vs R4 : 15~27% 가량 R4 가 더 우수함
  • R3 vs R5 : 33~60% 가량 R5 가 더 우수함
  • R4 vs R5 : 13~33% 가량 R5 가 더 우수함

img

마치며

이번 테스트를 통해 로컬 스토리지 영향에 미치는 작업이 어떠한 것인지 확인하였고, 워크로드에 어떠한 영향을 미치는지 알게 되었습니다. SSD가 EBS보다 빠를거라는 단순한 추측보다는 테스트를 통해 명확한 수치를 가지고 서비스에 도움이 될 수 있는 인스턴스타입이 어떤 것인지 찾을 수 있는 계기가 되었습니다.

AWS에서 신규 인스턴스타입을 출시 할 때 기존 인스턴스타입에 비해 대략적인 성능 향상에 대해서만 안내를 합니다. 그럼에도 불구하고 정확한 수치를 위해서는 위와 같은 별도 테스트를 하여, 서비스 안정성을 높여야 합니다.

감사합니다.