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 プロダクション運用チーム
大規模Webサービス、SQL Server、Oracle、AWS、Azureの設計・移行・運用に約30年従事。x12largeクラスのAWS RDS for SQL Server環境12セット、約12万テーブルのOracle環境、約3TBのTiDBからAurora MySQLへの移行を経験。現在も複数のクラウドデータベースと約30のWebサービスを、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 인스턴스 구성을 상담하기