giip
SES案件登録
AWSサイジング性能コストRDSフェイルオーバー

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` が空でないなら、読み取りは既に分散されている構成です。

CPU使用率を平均値ではなくパーセンタイルで取得する参照のみ
対象
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
done

ReadIOPS と 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 / WriteIOPS1秒あたりの読み取り/書き込みI/O回数合計がプロビジョニングIOPSに張り付いていないか。張り付いていればCPUを増やしても改善しない
ReadThroughput / WriteThroughput1秒あたりの読み書きバイト数合計がインスタンスクラスのEBS帯域上限に近いか。上限値は現行のAWSドキュメントで確認する
DatabaseConnections接続数上限に近い場合、サイジングよりコネクションプール設計の問題であることが多い
DBInstanceClass現在のインスタンスクラスSQL Serverでライセンス込みモデルを使う場合、ライセンス費用はvCPU数に連動する課金体系である点を前提に総額を比較する
MultiAZスタンバイを持つ構成かtrue の場合、クラス変更はフェイルオーバーを伴うカットオーバー作業になる

こういう状況で使います

  • ピーク時にCPU使用率が高止まりし、増設すべきか統合すべきか判断できない
  • 「8xlarge×3台」と「12xlarge×2台」のような案が並び、比較の軸が決まっていない
  • インスタンスを大きくしたのに期待したほど速くならなかった
  • 1台に集約した結果、1回の障害で全システムが同時に止まる構成になっている
  • SQL ServerのRDSで、インスタンスサイズを上げた際の総額が想定より大きく増えた

考えられる原因(可能性の高い順)

  1. 01

    ライターは水平分割できないという前提が共有されていない

    RDSのリードレプリカが増やせるのは読み取り処理だけです。1つの書き込みワークロードを複数インスタンスへ自動的に分散する仕組みはRDSにはありません。したがって「小さい複数台」にする場合、必ずデータベース単位・機能単位でワークロードを分ける設計判断が伴います。

  2. 02

    ボトルネックがCPUではない

    CPU以外(IOPS上限、EBSスループット上限、ロック競合、シングルスレッドで走るバッチ)が律速の場合、インスタンスクラスを上げてもvCPUが余るだけです。何が律速かを測らずにサイズを決めると、この状態になります。

  3. 03

    インスタンスサイズに比例する資源とそうでない資源が混在している

    vCPU・メモリ・ネットワーク帯域・EBS帯域は概ねインスタンスサイズとともに増えますが、増え方は同一ではありません。またストレージのプロビジョニングIOPSはインスタンスクラスとは別に設定する値で、クラスを上げただけでは増えません。

  4. 04

    ライセンス費用の課金体系が考慮されていない

    SQL Serverのライセンス込みモデルでは、ライセンス費用はvCPU数に連動します。合計vCPU数が同じでも、台数構成が変わると1台あたりの最小構成や冗長構成の取り方が変わり、総額の比較が単純な足し算にならないことがあります。金額は必ずAWS Pricing Calculatorと自社の契約条件で算出してください。

  5. 05

    障害の影響範囲(ブラストラディウス)が設計項目になっていない

    1台に集約するほど、その1台の障害・メンテナンス・パラメータ変更ミスが影響する範囲が広がります。逆に台数を増やすと、影響範囲は狭まる代わりに障害の発生機会そのものは増えます。可用性要件が業務ごとに違う場合、分割の判断軸はコストではなく影響範囲になります。

確認手順

  1. 1

    現在の構成を一覧化する

    参照のみ

    `aws rds describe-db-instances` でクラス・ストレージ種別・プロビジョニングIOPS・Multi-AZ・リードレプリカの有無を確認します。

  2. 2

    CPUをパーセンタイルで測る

    参照のみ

    CPUUtilization の p95・p99・Maximum を、繁忙期を含む期間で取得します。平均値だけでは判断できません。

  3. 3

    メモリの充足を測る

    参照のみ

    FreeableMemory の推移と、エンジン側のバッファキャッシュヒット率を併せて見ます。ヒット率が低くFreeableMemoryも小さいなら、メモリが律速です。

  4. 4

    I/Oが上限に当たっているか確認する

    参照のみ

    ReadIOPS+WriteIOPS をプロビジョニングIOPSと、ReadThroughput+WriteThroughput をインスタンスクラスのEBS帯域上限と比較します。上限値は現行のAWSドキュメントを参照します。

  5. 5

    ワークロードが分離可能かを棚卸しする

    参照のみ

    データベース間をまたぐクエリ、共通のマスタテーブル、分散トランザクションの有無を洗い出します。またぐ処理が多いほど分割コストは上がります。

  6. 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)を併用してください。

バージョン・環境による違い

Amazon AuroraAuroraはストレージ層が分離されており、ライター1台+リーダー複数という構成が標準です。ライターを水平分割できない点はRDSと同じで、書き込みのスケールはライターのサイズに依存します。
Amazon RDS for SQL Serverライセンス込みモデルの費用はvCPU数に連動する体系です。BYOL可否やエディションごとの制約はAWSの現行ドキュメントとライセンス契約の双方で確認してください。
Multi-AZ DBクラスターMulti-AZ DBインスタンス(スタンバイ1台)とMulti-AZ DBクラスター(読み取り可能なスタンバイ2台)では、フェイルオーバーの挙動と読み取り分散の可否が異なります。対象エンジンとバージョンの対応状況を確認してください。

これで解決しない場合に確認すること

  • エンジン内部の待機事象を確認する

    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エージェントと人間の専門家が継続的に監視・運用しています。

関連するナレッジ

関連サービス

RDSのインスタンス構成を相談する

同じ確認を複数の環境で継続する必要がある場合は、運用体制ごと相談できます。

RDSのインスタンス構成を相談する

ナレッジベース一覧へ