AWS RDS에서 큰 인스턴스 1대와 작은 인스턴스 여러 대로 나누는 경우의 차이
공개일 2026-08-13 · 업데이트일 2026-08-13 · 최종 검증일 2026-08-13
결론
어느 쪽이 정답인지는 구성만으로는 결정되지 않습니다. RDS의 라이터(쓰기 인스턴스)는 수평 분할할 수 없으므로, "작은 인스턴스 여러 대"는 쓰기 부하를 자동으로 분산하는 수단이 아니라 데이터베이스나 워크로드 자체를 나누는 것을 의미합니다. 판단 근거는 CPU 사용률의 백분위수, 메모리와 버퍼 풀의 충족도, IOPS와 처리량이 인스턴스 쪽 상한에 걸려 있는지, 그리고 워크로드를 분리할 수 있는지의 4가지입니다. 이 4가지를 실측한 뒤 구성을 결정합니다.
이 문서의 적용 조건
| 대상 제품 | Amazon RDS(SQL Server / MySQL / PostgreSQL), Amazon Aurora |
|---|---|
| 확인된 버전 | AWS CLI v2 / Amazon RDS·Amazon CloudWatch의 공개 API(2026-08-13 시점 사양 기준) |
| 적용 환경 | AWS(Amazon RDS, Amazon Aurora) |
| 필요 권한 | 조회 명령은 `rds:DescribeDBInstances`와 `cloudwatch:GetMetricStatistics`. 변경 명령은 `rds:ModifyDBInstance` |
| 실행 영향 | 조회 명령은 영향 없음. 인스턴스 클래스 변경은 재시작과 장애 조치(failover)를 수반함 |
| 재시작 | 인스턴스 클래스 변경 시 필요(Multi-AZ 구성에서는 장애 조치 발생) |
| 최종 검증일 | 2026-08-13 |
바로 실행할 수 있는 명령
- 対象
- Amazon RDS(AWS CLI v2)
- 権限
- rds:DescribeDBInstances
- 変更作業
- 없음(조회만)
- Production実行
- 가능
# 対象: Amazon RDS(AWS CLI v2)
# 権限: rds:DescribeDBInstances
# 変更作業: なし(参照のみ)
# Production 実行: 可能
aws rds describe-db-instances \
--query "DBInstances[].{Id:DBInstanceIdentifier,Class:DBInstanceClass,Engine:Engine,\
MultiAZ:MultiAZ,Storage:AllocatedStorage,StorageType:StorageType,Iops:Iops,\
StorageThroughput:StorageThroughput,License:LicenseModel,ReadReplicas:ReadReplicaDBInstanceIdentifiers}" \
--output table`Iops`와 `StorageThroughput`은 프로비저닝된 값이며 실제로 나오는 값이 아닙니다. 실측은 다음 CloudWatch 명령으로 가져옵니다. `ReadReplicas`가 비어 있지 않다면 읽기는 이미 분산된 구성입니다.
- 対象
- Amazon CloudWatch(네임스페이스 AWS/RDS)
- 権限
- cloudwatch:GetMetricStatistics
- 変更作業
- 없음(조회만)
- Production実行
- 가능
# 対象: Amazon CloudWatch(名前空間 AWS/RDS)
# 権限: cloudwatch:GetMetricStatistics
# 変更作業: なし(参照のみ)
# Production 実行: 可能
aws cloudwatch get-metric-statistics \
--namespace AWS/RDS \
--metric-name CPUUtilization \
--dimensions Name=DBInstanceIdentifier,Value=db-sample-instance \
--start-time 2026-08-06T00:00:00Z \
--end-time 2026-08-13T00:00:00Z \
--period 300 \
--statistics Average Maximum \
--extended-statistics p95 p99 \
--output table평균값만으로 사이징을 판단하면 피크 시에 포화된 구성을 "여유 있음"으로 오판하게 됩니다. `--period 300`(5분) 평균은 5분간의 피크를 평탄화해 버리므로 `p95`·`p99`와 `Maximum`을 반드시 함께 확인하십시오. 기간은 성수기를 포함하는 범위로 바꿔 다시 가져오십시오.
- 対象
- Amazon CloudWatch(네임스페이스 AWS/RDS)
- 権限
- cloudwatch:GetMetricStatistics
- 変更作業
- 없음(조회만)
- Production実行
- 가능
# 対象: Amazon CloudWatch(名前空間 AWS/RDS)
# 権限: cloudwatch:GetMetricStatistics
# 変更作業: なし(参照のみ)
# Production 実行: 可能
for M in ReadIOPS WriteIOPS ReadThroughput WriteThroughput FreeableMemory DatabaseConnections
do
echo "===== $M ====="
aws cloudwatch get-metric-statistics \
--namespace AWS/RDS \
--metric-name "$M" \
--dimensions Name=DBInstanceIdentifier,Value=db-sample-instance \
--start-time 2026-08-06T00:00:00Z \
--end-time 2026-08-13T00:00:00Z \
--period 300 \
--statistics Average Maximum \
--output text
doneReadIOPS와 WriteIOPS의 합계가 프로비저닝 IOPS에 딱 붙어 있다면 CPU를 늘려도 처리량은 늘지 않습니다. ReadThroughput과 WriteThroughput의 합계(바이트/초)가 인스턴스 클래스의 EBS 대역 상한에 걸려 있는 경우도 마찬가지입니다. 상한값은 인스턴스 클래스마다 다르므로 최신 AWS 문서에서 대상 클래스의 값을 확인하십시오.
- 対象
- Amazon RDS(AWS CLI v2)
- 権限
- rds:ModifyDBInstance
- 変更作業
- 있음(인스턴스 클래스 변경·재시작·Multi-AZ에서는 장애 조치)
- Production実行
- 실행 가능하나 유지보수 시간대와 롤백 절차를 정한 뒤 실시할 것
# 対象: Amazon RDS(AWS CLI v2)
# 権限: rds:ModifyDBInstance
# 変更作業: あり(インスタンスクラス変更 → 再起動 / Multi-AZ ではフェイルオーバー)
# Production 実行: 可能だが接続断が発生する。メンテナンス枠内で実施すること
aws rds modify-db-instance \
--db-instance-identifier db-sample-instance \
--db-instance-class db.r6i.4xlarge \
--no-apply-immediately`--no-apply-immediately`를 붙이면 다음 유지보수 윈도우에서 적용됩니다. `--apply-immediately`는 즉시 재시작을 일으키므로 연결 끊김을 감당할 수 있는 시간대 외에는 사용하지 마십시오. 변경 전에 `aws rds describe-orderable-db-instance-options`로 대상 엔진·버전·리전에서 그 클래스를 선택할 수 있는지 확인합니다.
결과 해석 방법
| 열 | 의미 | 확인할 포인트 |
|---|---|---|
| CPUUtilization(p95 / p99 / Maximum) | vCPU 사용률 | p95가 상시 높으면 CPU 제한. 평균은 낮은데 Maximum만 높은 경우 특정 배치가 원인일 가능성이 높음 |
| FreeableMemory | 확보 가능한 메모리량(바이트) | 지속적으로 작은 값이면 메모리 제한. 버퍼 풀이 워킹셋을 담지 못하고 있을 가능성 |
| ReadIOPS / WriteIOPS | 초당 읽기/쓰기 I/O 횟수 | 합계가 프로비저닝 IOPS에 딱 붙어 있는지. 붙어 있다면 CPU를 늘려도 개선되지 않음 |
| ReadThroughput / WriteThroughput | 초당 읽기/쓰기 바이트 수 | 합계가 인스턴스 클래스의 EBS 대역 상한에 근접한지. 상한값은 최신 AWS 문서로 확인 |
| DatabaseConnections | 연결 수 | 상한에 근접하면 사이징보다 커넥션 풀 설계의 문제인 경우가 많음 |
| DBInstanceClass | 현재 인스턴스 클래스 | SQL Server에서 라이선스 포함 모델을 쓰는 경우, 라이선스 비용은 vCPU 수에 연동되는 과금 체계임을 전제로 총액을 비교 |
| MultiAZ | 스탠바이를 가진 구성인지 | true인 경우 클래스 변경은 장애 조치를 수반하는 전환 작업이 됨 |
이런 상황에서 사용합니다
- 피크 시 CPU 사용률이 계속 높아 증설해야 할지 통합해야 할지 판단할 수 없음
- "8xlarge×3대"와 "12xlarge×2대" 같은 방안이 나열되지만 비교 기준이 정해지지 않음
- 인스턴스를 키웠는데도 기대만큼 빨라지지 않음
- 1대로 통합한 결과 한 번의 장애로 전체 시스템이 동시에 멈추는 구성이 됨
- SQL Server의 RDS에서 인스턴스 크기를 올렸을 때 총액이 예상보다 크게 늘어남
가능한 원인(가능성이 높은 순)
01
라이터는 수평 분할할 수 없다는 전제가 공유되지 않음
RDS의 읽기 전용 복제본(리드 레플리카)으로 늘릴 수 있는 것은 읽기 처리뿐입니다. 하나의 쓰기 워크로드를 여러 인스턴스로 자동 분산하는 구조는 RDS에 없습니다. 따라서 "작은 여러 대"로 할 경우, 반드시 데이터베이스 단위·기능 단위로 워크로드를 나누는 설계 판단이 수반됩니다.
02
병목이 CPU가 아님
CPU 이외(IOPS 상한, EBS 처리량 상한, 락 경쟁, 단일 스레드로 실행되는 배치)가 제한 요인인 경우, 인스턴스 클래스를 올려도 vCPU만 남습니다. 무엇이 제한 요인인지 측정하지 않고 크기를 정하면 이런 상태가 됩니다.
03
인스턴스 크기에 비례하는 자원과 그렇지 않은 자원이 섞여 있음
vCPU·메모리·네트워크 대역·EBS 대역은 대체로 인스턴스 크기와 함께 늘어나지만 증가 방식은 동일하지 않습니다. 또한 스토리지의 프로비저닝 IOPS는 인스턴스 클래스와 별도로 설정하는 값으로, 클래스를 올리는 것만으로는 늘지 않습니다.
04
라이선스 비용의 과금 체계가 고려되지 않음
SQL Server의 라이선스 포함 모델에서는 라이선스 비용이 vCPU 수에 연동됩니다. 총 vCPU 수가 같아도 대수 구성이 바뀌면 대당 최소 구성이나 이중화 방식이 바뀌어 총액 비교가 단순한 합산이 되지 않는 경우가 있습니다. 금액은 반드시 AWS Pricing Calculator와 자사의 계약 조건으로 산출하십시오.
05
장애의 영향 범위(blast radius)가 설계 항목이 되지 않음
1대로 통합할수록 그 한 대의 장애·유지보수·파라미터 변경 실수가 영향을 미치는 범위가 넓어집니다. 반대로 대수를 늘리면 영향 범위는 좁아지는 대신 장애 발생 자체의 기회는 늘어납니다. 가용성 요구사항이 업무마다 다르다면 분할 판단의 기준은 비용이 아니라 영향 범위가 됩니다.
확인 절차
- 1
현재 구성 목록화하기
참조만`aws rds describe-db-instances`로 클래스·스토리지 종류·프로비저닝 IOPS·Multi-AZ·리드 레플리카 유무를 확인합니다.
- 2
CPU를 백분위수로 측정하기
참조만CPUUtilization의 p95·p99·Maximum을 성수기를 포함한 기간으로 가져옵니다. 평균값만으로는 판단할 수 없습니다.
- 3
메모리 충족도 측정하기
참조만FreeableMemory의 추이와 엔진 쪽 버퍼 캐시 적중률을 함께 봅니다. 적중률이 낮고 FreeableMemory도 작다면 메모리가 제한 요인입니다.
- 4
I/O가 상한에 걸려 있는지 확인하기
참조만ReadIOPS+WriteIOPS를 프로비저닝 IOPS와, ReadThroughput+WriteThroughput을 인스턴스 클래스의 EBS 대역 상한과 비교합니다. 상한값은 최신 AWS 문서를 참조합니다.
- 5
워크로드가 분리 가능한지 전수 조사하기
참조만데이터베이스 간을 넘나드는 쿼리, 공통 마스터 테이블, 분산 트랜잭션 여부를 찾아냅니다. 넘나드는 처리가 많을수록 분할 비용이 올라갑니다.
- 6
후보 구성으로 시험하기
낮음스냅샷에서 복원한 검증 인스턴스에 운영과 동등한 워크로드를 흘려 후보 클래스에서 지표가 어떻게 변하는지 측정합니다. 운영 환경에서의 시행착오는 피합니다.
대응 방법
즉시 실행 가능한 저위험 대응
제한 요인을 하나로 특정하기
참조만CPU·메모리·IOPS·처리량·락 중 무엇이 상한에 걸려 있는지를 실측으로 하나로 좁힙니다. 이것이 정해지지 않은 채 구성안을 비교해도 결론이 나지 않습니다.
읽기 부하를 리드 레플리카로 분리할 수 있는지 검토하기
낮음리포트계·조회계 부하가 큰 경우, 라이터를 키우기보다 리드 레플리카로 옮기는 쪽이 영향이 작은 경우가 있습니다. 레플리카 지연을 감당할 수 있는 처리에 한정됩니다.
사전 검토가 필요한 변경
스토리지 쪽 상한을 먼저 재검토하기
중간I/O가 제한 요인이라면 인스턴스 클래스가 아니라 스토리지 종류·프로비저닝 IOPS·스토리지 처리량의 재검토가 먼저입니다. 인스턴스 클래스 변경보다 영향이 작은 경우가 있습니다.
워크로드 단위로 분할하는 계획 세우기
중간"나눈다"를 선택한다면 분할 단위(업무 시스템 단위/스키마 단위), 넘나드는 처리의 대체 방법, 전환 절차, 롤백 절차를 함께 설계합니다.
운영 작업의 증가분 추정하기
참조만인스턴스를 늘리면 백업 윈도우·유지보수 윈도우·파라미터 그룹·모니터링 설정·알림·패치 적용이 모두 대수만큼 늘어납니다. 이 작업량을 구성 비교에 포함합니다.
재시작·서비스 영향이 따르는 변경
인스턴스 클래스 변경하기
높음클래스 변경은 재시작을 수반하며 Multi-AZ 구성에서는 장애 조치가 발생합니다. 전환 시간은 워크로드와 엔진에 따라 다르므로 사전에 검증 환경에서 측정한 뒤 유지보수 시간대를 정합니다.
데이터베이스를 별도 인스턴스로 분리하기
전문가 검토 필수DB를 별도 인스턴스로 옮기면 지금까지 같은 인스턴스 내에서 끝났던 조인이 Linked Server나 애플리케이션 쪽 조인으로 바뀝니다. 성능 특성과 트랜잭션 경계가 바뀌므로 이전 대상 쿼리의 전수 조사가 필수입니다.
!주의 사항
- 본 문서는 "어느 쪽이 좋다"는 결론이나 가격·절감률을 제시하지 않습니다. 금액은 AWS Pricing Calculator와 자사의 계약 조건으로, 성능은 본인의 CloudWatch 실측값으로 판단하십시오.
- 리드 레플리카는 읽기를 확장하는 구조이며 쓰기 처리량은 늘지 않습니다. 쓰기가 제한 요인인 경우 대수를 늘려도 해결되지 않습니다.
- 인스턴스 클래스 변경은 재시작을 수반합니다. Multi-AZ 구성에서는 장애 조치가 발생하며, 그 소요 시간은 환경에 따라 다릅니다. 값을 가정하지 말고 검증 환경에서 실측한 뒤 전환 계획을 세우십시오.
- 데이터베이스를 분할하면 같은 인스턴스 내의 조인이 Linked Server 또는 애플리케이션 쪽 조인으로 바뀝니다. 네트워크 왕복이 추가되어 실행 계획과 성능 특성이 바뀌고, 분산 트랜잭션이 필요해지는 경우도 있습니다.
- 인스턴스 대수가 늘어나면 백업·유지보수 윈도우·파라미터 그룹·모니터링 설정이 대수만큼 늘어납니다. 운영 작업량을 구성 비교 대상에 포함하십시오.
- CloudWatch의 표준 해상도 메트릭은 기간 내를 평균화합니다. 짧은 스파이크는 묻히므로 `Maximum`과 확장 통계(p95·p99)를 함께 사용하십시오.
버전·환경에 따른 차이
이것으로 해결되지 않을 때 확인할 사항
엔진 내부의 대기 이벤트 확인하기
CPU도 I/O도 상한에 도달하지 않았는데 느린 경우, 락 대기·래치 대기·네트워크 대기가 주된 원인일 가능성이 있습니다. 인스턴스 크기의 문제가 아닙니다.
단일 쿼리가 단일 스레드로 제한되고 있지 않은지
거대한 배치 처리가 병렬화되어 있지 않으면 vCPU를 늘려도 한 처리의 소요 시간은 줄지 않습니다. 쿼리 쪽 병렬도 설정을 먼저 확인합니다.
커넥션 풀 설정 확인하기
DatabaseConnections가 상한 근처라면 인스턴스 크기보다 애플리케이션 쪽 풀 설정이 원인인 경우가 있습니다.
스토리지의 프로비저닝 값과 실측값 대조하기
프로비저닝 IOPS에 비해 실측이 항상 낮다면 제한 요인은 스토리지가 아닙니다. 반대로 딱 붙어 있다면 클래스 변경으로는 해결되지 않습니다.
분할 후 필요해지는 횡단 처리 찾아내기
야간 배치나 집계 처리가 DB를 넘나들고 있지 않은지를 실행 중인 쿼리와 작업 정의에서 확인합니다.
이 문서의 근거와 한계
제품 공식 문서에 기반한 설명
Amazon RDS의 인스턴스 클래스·Multi-AZ·리드 레플리카 공개 사양, 그리고 Amazon CloudWatch의 AWS/RDS 네임스페이스 메트릭(CPUUtilization, ReadIOPS, WriteIOPS, ReadThroughput, WriteThroughput, FreeableMemory, DatabaseConnections) 공개 사양에 기반한 일반적인 판단 절차입니다. 인스턴스 클래스별 상한값·가격·특정 환경의 실측값은 포함하지 않습니다.
자주 묻는 질문
8xlarge 3대와 12xlarge 2대 중 어느 쪽이 좋습니까?
구성 정보만으로는 결정되지 않습니다. 총 vCPU 수가 같아도 쓰기 워크로드를 분리할 수 있는지에 따라 결론이 반대가 됩니다. 분리할 수 없다면 1대당 상한이 효과를 발휘하므로 큰 인스턴스가 유리하고, 업무별로 완전히 분리할 수 있다면 영향 범위를 좁힐 수 있는 여러 대에 장점이 있습니다. 먼저 CPU의 p95, FreeableMemory, IOPS와 처리량의 상한 도달 상황을 측정하십시오.
RDS의 인스턴스를 늘리면 쓰기 성능이 올라갑니까?
올라가지 않습니다. RDS의 라이터는 1대이며 리드 레플리카가 분산하는 것은 읽기뿐입니다. 쓰기를 분산하고 싶다면 데이터베이스나 워크로드 자체를 애플리케이션 설계로 나누어야 합니다.
SQL Server의 경우 대수를 나누면 라이선스 비용은 어떻게 됩니까?
라이선스 포함 모델의 비용은 vCPU 수에 연동되는 체계입니다. 총 vCPU 수가 같으면 단순 비교가 가능할 것처럼 보이지만, 실제로는 각 인스턴스의 최소 구성이나 이중화 방식에 따라 총액이 달라집니다. 금액은 AWS Pricing Calculator와 본인의 계약 조건으로 산출하십시오. 본 문서에서는 가격을 제시하지 않습니다.
인스턴스 클래스를 올리면 반드시 빨라집니까?
그렇지 않습니다. 제한 요인이 스토리지의 프로비저닝 IOPS나 락 경쟁인 경우, vCPU와 메모리가 늘어도 개선되지 않습니다. 클래스 변경 전에 CPU·메모리·IOPS·처리량·대기 이벤트 중 무엇이 상한에 걸려 있는지를 하나로 특정하십시오.
Production에서 실행할 수 있습니까?
`describe-db-instances`와 `get-metric-statistics`는 조회만 하므로 운영 환경에서 그대로 실행할 수 있습니다. `modify-db-instance`에 의한 클래스 변경은 재시작과 장애 조치를 수반하므로 유지보수 시간대와 롤백 절차를 정한 뒤 실시하십시오.
분할한 후 데이터베이스를 넘나드는 쿼리는 어떻게 됩니까?
SQL Server라면 Linked Server를 경유하거나 애플리케이션 쪽에서의 조인으로 대체됩니다. 어느 쪽이든 네트워크 왕복이 추가되어 실행 계획이 바뀌므로, 분할 전에 "넘나드는 처리"를 찾아내고 대체 후의 성능을 검증 환경에서 확인하십시오.
이 문서가 다루는 질문
- RDS SQL Server의 처리량을 결정하는 요소
- 8xlarge×3대와 12xlarge×2대 중 어느 쪽이 좋은가
- RDS는 인스턴스를 늘리면 쓰기도 빨라지는가
- 데이터베이스를 나눠야 하는가 1대로 통합해야 하는가
위험도 표시의 의미
- 참조만데이터와 설정을 변경하지 않습니다.
- 낮음영향은 제한적이지만 권한과 부하 확인이 필요합니다.
- 중간성능·락·비용에 영향을 줄 수 있습니다.
- 높음장애·데이터 손실·복구 작업이 발생할 수 있습니다.
- 전문가 검토 필수프로덕션 적용 전 별도 검토가 반드시 필요합니다.
GIIP의 대응 범위
사이징 판단 자체는 실측값만 갖추면 한 번의 작업으로 끝납니다. 어려운 것은 그 이후입니다. 워크로드는 업무의 성장과 함께 변하며, 반년 전에 적절했던 구성이 지금도 적절하다는 보장은 없습니다. GIIP에서는 AWS와 Azure 상의 여러 데이터베이스 및 약 30개의 웹 서비스에 대해 CPU·메모리·I/O 지표를 AI 에이전트가 지속적으로 수집하고, 상한에 근접하는 경향이 나타난 시점에 사람인 전문가가 구성 재검토 필요성을 판단합니다. 사이징을 "그때그때의 상담"이 아니라 추이 모니터링에서 시작되는 정기 업무로 다루는 방식입니다.
작성·기술 검증
GIIP 프로덕션 운영팀
대규모 웹 서비스, SQL Server, Oracle, AWS, Azure의 설계·마이그레이션·운영에 약 30년간 종사했습니다. x12large급 AWS RDS for SQL Server 환경 12세트, 약 12만 개 테이블 규모의 Oracle 환경, 약 3TB 규모의 TiDB에서 Aurora MySQL로의 마이그레이션 경험이 있습니다. 현재도 다수의 클라우드 데이터베이스와 약 30개의 웹 서비스를 AI 에이전트와 사람 전문가가 지속적으로 모니터링·운영하고 있습니다.
AWS 데이터베이스 비용을 재검토할 때 확인할 항목
AWS 데이터베이스 비용을 영향이 작은 순서(미사용 정지 → right-sizing → 스토리지 → 백업 → 비운영 → 커밋먼트)로 재검토하기 위한 체크리스트입니다.
infrastructureAWS EBS의 IOPS와 물리 디스크의 IOPS는 무엇이 다른가
EBS의 IOPS가 왜 물리 디스크의 IOPS와 직접 비교할 수 없는지를 상한이 적용되는 위치(볼륨/인스턴스)와 측정 방법에서 정리한 문서입니다.
infrastructureRandom IOPS와 Sequential IOPS의 차이, 벤치마크 결과를 읽는 방법
IOPS라는 수치가 I/O 크기·큐 깊이·read/write 비율 없이는 비교할 수 없는 이유와, fio로 측정 조건을 만드는 방법을 정리한 문서입니다.
sql-serverSQL Server의 Linked Server에서 Msg 7356이 발생하는 원인과 확인 방법
Msg 7356은 "컴파일 시점과 실행 시점에 열의 메타데이터가 불일치했다"는 것을 나타내는 오류입니다. 원인 구분과 패스스루 쿼리를 통한 회피 절차를 정리합니다.
관련 서비스
RDS 인스턴스 구성을 상담하기
동일한 확인을 여러 환경에서 계속해야 한다면, 운영 체계 전체를 상담할 수 있습니다.
RDS 인스턴스 구성을 상담하기