Last Updated on 2월 7, 2023 by Jade(정현호)
안녕하세요
이번 글은 Amazon RDS for MySQL 에서 새롭게 추가된 기능인 Optimized Writes 에 대해서 확인 해보려고 합니다.
Amazon RDS Optimized Writes
AWS RDS 에서는 이제 Optimized Writes 라는 기능을 지원하기 시작하였으며, 추가 비용 없이 쓰기 처리량을 최대 2배 가량 높일 수 있게 되었습니다.
그래서 쓰기에 집약적 데이터베이스 워크로드를 실행하는 환경에서는 이러한 기능을 사용할 수 있는 RDS for MySQL 이 유용할 것으로 생각 됩니다.
MySQL 에서는 "Double Write Buffer(이중 쓰기 버퍼)" 기본 기능을 통해서 정전이나 서버 장애, 인스턴스 Crash 등의 이슈가 발생되더라도 데이터의 손실을 방지할 수 있게 됩니다.
참조) Double Write Buffer(이중 쓰기 버퍼)
다만, 안전하게 저장하는 하기 위해서 이 쓰기 방법을 사용시에는 추가적인 오버헤드가 발생될 수도 있습니다. 그래서 데이터베이스의 성능이나 처리량이 낮아 질수도 있습니다.
(이 부분은 데이터의 입력 건수와 입력 패턴, 서버 스펙 등에 따라서 결과의 양상은 달라짐)
Amazon RDS Optimized Writes 사용 시 추가 비용 없이 RDS for MySQL 의 쓰기 트랜잭션 처리량을 2배 가량 높일 수 있으며, 이 기능에서 사용되는 방법으로는 두번 기록되는 Double Write Buffer(이중 쓰기 버퍼) 기능을 사용하지 않고, 한 번만 쓰기를 하여 성능을 높이며, 내구성과 안정성 측면에서는 AWS Nitro System을 사용하여 스토리지에 안전하게 데이터를 기록하게 됩니다.
즉, Optimized Writes 기능이 활성화 되어 있으면 RDS for MySQL 데이터베이스는 이중 쓰기 버퍼를 사용하지 않고 내구성 있는 스토리지에 데이터를 플러시할 때 한 번만 씁니다.
AWS Nitro System 에 대해서는 아래 문서와 영상을 참조하시면 됩니다.
Amazon RDS Optimized Writes는 RDS for MySQL 버전 8.0.30 이상과 db.r6i 및 db.r5b 데이터베이스 인스턴스에서 기본 옵션으로 제공되어 사용할 수 있습니다.
포스팅 작성 시점 기준으로 Optimized Writes는 미국 동부(버지니아 북부), 미국 서부(오레곤), 미국 동부(오하이오), 유럽(아일랜드), 유럽(파리), 유럽(프랑크푸르트), 아시아 태평양(도쿄) 및 아시아 태평양(싱가포르) AWS 리전에서 사용할 수 있습니다.(포스팅 작성 시점 기준으로 아직 서울 리전은 불가)[업데이트] 서울 리전에서도 사용 가능 합니다.
Optimized Writes Test
Optimized Writes 기능에 대한 테스트는 아래와 같은 환경 및 조건에서 진행하였습니다.
- 리전: Tokyo(ap-northeast-1)
- MySQL 버전 : 8.0.31
- DB Class : db.r5b.large
- (2 vcpus , 16GiB ram , Network: 10,000 Mbps)
- Storage : GP3
- Single DB instance(Not Multi-AZ)
- Enable automated backups
- Data Insert Tool : sysbench
- 입력 데이터 건수 : 30,000,000
지원하는 리전에서 RDS 생성을 선택하면 아래와 같이 "Optimized Writes" 기능을 지원하는 버전만 볼 수 있는 필터가 있는 것을 확인 할 수 있습니다.
8.0.30 이상 버전 부터 가능하며, 포스팅 작성 시점에서 8.0.31 버전 까지 가능함에 따라서 30 버전과 31 버전 두개를 선택 할 수 있습니다.
아래로 이동하면 DB Class 에 대해서도 "Optimized Writes" 이 지원하는 목록만 볼 수 있는 필터가 추가 된 것을 확인할 수 있으며, 필터를 활성화 하면 기능을 사용할 수 있는 DB 클래스만 확인 할 수 있습니다.
이 기능과 관련된 파라미터는 rds.optimized_writes 입니다. AUTO 는 데이터베이스에서 지원하는 경우 RDS Optimized Writes를 켭니다. 데이터베이스에서 지원하지 않는 경우 RDS Optimized Writes를 끕니다. AUTO 이 설정은 기본값입니다.
OFF는 데이터베이스에서 지원하는 경우에도 RDS Optimized Writes를 끕니다.
RDS Optimized Writes를 사용하도록 구성된 RDS for MySQL 데이터베이스에서 이 기능을 지원하지 않는 DB 인스턴스 클래스로 변경 하는 경우 RDS는 Optimized Writes를 자동으로 끕니다.
RDS Optimized Writes가 사용 되고 있으면 데이터베이스는 MySQL 이중 쓰기 버퍼를 사용하지 않습니다.
RDS Optimized Writes가 꺼져 있으면 데이터베이스는 MySQL 이중 쓰기 버퍼를 사용합니다.
RDS for MySQL 데이터베이스가 RDS Optimized Writes를 사용하고 있는지 확인하려면 데이터베이스의 시스템변수 innodb_doublewrite 현재 값을 확인 합니다.
데이터베이스가 RDS Optimized Writes를 사용하는 경우 시스템 변수의 값은 FALSE(0)로 설정됩니다.
RDS 를 설치 한 직후, innodb_doublewrite 시스템 변수 값을 확인 해보면 비활성화 된 것을 확인 할 수 있습니다.
mysql> show variables like 'innodb_doublewrite'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | innodb_doublewrite | OFF | +--------------------+-------+
RDS Optimized Writes 기능을 끄기 위해서는 RDS 의 파라미터 그룹에서 OFF 로 변경 해야하며, Apply type 이 static 임에 따라 파라미터 그룹의 적용을 위해서는 RDS 인스턴스의 재시작이 필요 합니다.
RDS Optimized Writes 기능의 사용 과 미사용에 따른 수행 시간은 아래와 같으며 입력 데이터 건수는 3천만건 입니다.
기능 사용 | 기능 미사용 |
58분 12초 | 122분 42초 |
* 입력한 데이터건수, 입력 방식, 입력한 데이터의 종류 등에 따라서 수행 시간은 차이가 있으며, 위의 수행시간은 포스팅의 테스트 시스템에서 테스트 데이터의 기준 입니다.
CPU 사용과 Write IOPS 등에서 수치가 차이나는 것을 확인 할 수 있으며, 먼저 CPU 의 경우 IO 에 대한 처리량이 늘어남에 따라서 CPU 사용이 조금 더 된 것을 확인 할 수 있습니다.
[Optimized Writes 기능 사용시]
[Optimized Writes 기능 미사용시]
Write IOPS 의 경우도 쓰기 처리량이 늘어남에 따라서 IOPS 도 증가한 것을 확인 할 수 있습니다.
[Optimized Writes 기능 사용시]
[Optimized Writes 기능 미사용시]
RDS Optimized Writes 기능은 AWS 의 설명과 동일하게 약 두배 정도의 쓰기 처리량이 증가한 것을 확인 할 수 있었으며, 쓰기가 집약되고 쓰기 성능이 중요한 업무에서 해당 기능을 고려해보시는 것도 좋을 것 이라고 생각됩니다.
Reference
Reference URL
• amazon.com//whats-new/rds-optimized-writes
• amazon.com/UserGuide/rds-optimized-writes
• amazon.com/nitro
연관된 다른 글
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io