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` |
| 実行影響 | 参照コマンドは影響なし。インスタンスクラス変更は再起動とフェイルオーバーを伴う |
| 再起動 | インスタンスクラス変更時は必要(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 | 1秒あたりの読み取り/書き込みI/O回数 | 合計がプロビジョニングIOPSに張り付いていないか。張り付いていればCPUを増やしても改善しない |
| ReadThroughput / WriteThroughput | 1秒あたりの読み書きバイト数 | 合計がインスタンスクラスのEBS帯域上限に近いか。上限値は現行のAWSドキュメントで確認する |
| DatabaseConnections | 接続数 | 上限に近い場合、サイジングよりコネクションプール設計の問題であることが多い |
| DBInstanceClass | 現在のインスタンスクラス | SQL Serverでライセンス込みモデルを使う場合、ライセンス費用はvCPU数に連動する課金体系である点を前提に総額を比較する |
| MultiAZ | スタンバイを持つ構成か | true の場合、クラス変更はフェイルオーバーを伴うカットオーバー作業になる |
こういう状況で使います
- ピーク時にCPU使用率が高止まりし、増設すべきか統合すべきか判断できない
- 「8xlarge×3台」と「12xlarge×2台」のような案が並び、比較の軸が決まっていない
- インスタンスを大きくしたのに期待したほど速くならなかった
- 1台に集約した結果、1回の障害で全システムが同時に止まる構成になっている
- SQL ServerのRDSで、インスタンスサイズを上げた際の総額が想定より大きく増えた
考えられる原因(可能性の高い順)
01
ライターは水平分割できないという前提が共有されていない
RDSのリードレプリカが増やせるのは読み取り処理だけです。1つの書き込みワークロードを複数インスタンスへ自動的に分散する仕組みはRDSにはありません。したがって「小さい複数台」にする場合、必ずデータベース単位・機能単位でワークロードを分ける設計判断が伴います。
02
ボトルネックがCPUではない
CPU以外(IOPS上限、EBSスループット上限、ロック競合、シングルスレッドで走るバッチ)が律速の場合、インスタンスクラスを上げてもvCPUが余るだけです。何が律速かを測らずにサイズを決めると、この状態になります。
03
インスタンスサイズに比例する資源とそうでない資源が混在している
vCPU・メモリ・ネットワーク帯域・EBS帯域は概ねインスタンスサイズとともに増えますが、増え方は同一ではありません。またストレージのプロビジョニングIOPSはインスタンスクラスとは別に設定する値で、クラスを上げただけでは増えません。
04
ライセンス費用の課金体系が考慮されていない
SQL Serverのライセンス込みモデルでは、ライセンス費用はvCPU数に連動します。合計vCPU数が同じでも、台数構成が変わると1台あたりの最小構成や冗長構成の取り方が変わり、総額の比較が単純な足し算にならないことがあります。金額は必ずAWS Pricing Calculatorと自社の契約条件で算出してください。
05
障害の影響範囲(ブラストラディウス)が設計項目になっていない
1台に集約するほど、その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
候補構成で試験する
低スナップショットから復元した検証インスタンスに本番相当のワークロードを流し、候補クラスで指標がどう変わるかを測ります。本番での試行錯誤は避けます。
対応方法
すぐに実施できる低リスクの対応
律速要因を1つに特定する
参照のみCPU・メモリ・IOPS・スループット・ロックのどれが上限に当たっているかを実測で1つに絞ります。ここが決まらないうちに構成案を比較しても結論は出ません。
読み取り負荷はリードレプリカで切り出せるか検討する
低レポート系・参照系の負荷が大きい場合、ライターを大きくするよりリードレプリカへ寄せるほうが影響が小さいことがあります。レプリカ遅延を許容できる処理に限ります。
事前検討が必要な変更
ストレージ側の上限を先に見直す
中I/Oが律速ならインスタンスクラスではなくストレージ種別・プロビジョニングIOPS・ストレージスループットの見直しが先です。インスタンスクラス変更より影響が小さい場合があります。
ワークロード単位で分割する計画を作る
中「分ける」を採るなら、分割単位(業務システム単位/スキーマ単位)、またぐ処理の置き換え方、切り替え手順、切り戻し手順をセットで設計します。
運用作業の増分を見積もる
参照のみインスタンスを増やすと、バックアップウィンドウ・メンテナンスウィンドウ・パラメータグループ・監視設定・アラート・パッチ適用がすべて台数ぶん増えます。この工数を構成比較に含めます。
再起動・サービス影響を伴う変更
インスタンスクラスを変更する
高クラス変更は再起動を伴い、Multi-AZ構成ではフェイルオーバーが発生します。切り替え時間はワークロードとエンジンにより異なるため、事前に検証環境で計測してからメンテナンス枠を決めます。
データベースを別インスタンスへ分離する
専門家レビュー必須DBを別インスタンスへ移すと、これまで同一インスタンス内で完結していた結合はLinked Serverやアプリケーション側の結合に変わります。性能特性とトランザクション境界が変わるため、移行対象クエリの洗い出しが必須です。
!注意事項
- この文書では「どちらが良い」という結論も、価格・削減率も提示しません。金額はAWS Pricing Calculatorと自社の契約条件、性能はご自身のCloudWatch実測値で判断してください。
- リードレプリカは読み取りをスケールする仕組みであり、書き込みスループットは増えません。書き込みが律速の場合、台数を増やしても解決しません。
- インスタンスクラス変更は再起動を伴います。Multi-AZ構成ではフェイルオーバーが発生し、その所要時間は環境により異なります。値を仮定せず、検証環境で実測してからカットオーバー計画を立ててください。
- データベースを分割すると、同一インスタンス内の結合はLinked Serverまたはアプリケーション側の結合になります。ネットワーク往復が入るため実行計画と性能特性が変わり、分散トランザクションが必要になる場合もあります。
- インスタンス台数が増えると、バックアップ・メンテナンスウィンドウ・パラメータグループ・監視設定が台数ぶん増えます。運用工数は構成比較の対象に含めてください。
- CloudWatchの標準解像度メトリクスは期間内を平均化します。短時間のスパイクは埋もれるため、`Maximum` と拡張統計(p95・p99)を併用してください。
バージョン・環境による違い
これで解決しない場合に確認すること
エンジン内部の待機事象を確認する
CPUもI/Oも上限に達していないのに遅い場合、ロック待ち・ラッチ待ち・ネットワーク待ちが支配的である可能性があります。インスタンスサイズの問題ではありません。
単一クエリがシングルスレッドで律速していないか
巨大なバッチ処理が並列化されていない場合、vCPUを増やしても1本の処理時間は縮みません。クエリ側の並列度設定を先に確認します。
コネクションプールの設定を確認する
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・スループット・待機事象のどれが上限に当たっているかを1つに特定してください。
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のWebサービスについて、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のインスタンス構成を相談する