14
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

〜世代変更・サイズ最適化・SQL改善で“静かに効くDBコスト”〜

(前々回) 序章:コスト削減 - コストと戦う未来の僕へ -
(前回)コスト削減 - EC2編 - 🚀

AWS の中でも RDS(Aurora含む)は桁が大きいサービス
EC2より高いぶん、削れるとインパクトも大きい。

ただ、DBは“触るの怖い”の典型。
だけど実務で向き合っていくうちに、

RDSは、改善できる余地がめちゃくちゃ大きいサービス
=やればやるほどコストが落ちる

ということに気づいた。

今回は、実際にやったこと・感じたことを中心に
実務ベースでまとめます。


🎯 結論:RDS / Aurora で削減するなら見るべきはこの4つ

# 削減ポイント 効果
1 世代変更(例:r7g → r8g) 性能UP・コスパ改善。ただしリージョン影響大。
2 インスタンスタイプを1つ下げる RDSこそ最大の削減ポイント。月の削減幅がデカい。
3 ストレージ最適化(IOPS / Backtrack / 容量管理) “気づかない課金”の本丸。改善効果が継続する。
4 SQL改善(スロークエリ / INDEX / 取得量最適化) 負荷が減り、結果的にインスタンスサイズを下げられる。

🧪 僕が実際にやったこと(実務ベース)

✔ 世代変更:本当は r8g にしたかったが r7g を採用

今回のプロジェクトでは r8g を使いたかったものの、
東京リージョンと諸条件の兼ね合いで r7g を選択

結果として:

  • 性能は20〜30%改善
  • ただし 料金は少し上がる

世代更新は確かに重要だが、
この経験で改めて気づいた。

RDSの本命は“世代”ではなく“サイズを落とせるかどうか”。

世代変更は“土台づくり”。
本当の削減は、その先にある。


✔ RDSこそ、インスタンスタイプを1つ落とすのが鍵

EC2以上に、RDSは サイズを落としたときのインパクトが大きい

例:

r7g.4xlarge → r7g.2xlarge

→ 単純計算で インスタンス代が約半額に近づく
→ 月間数万円〜十数万円が動くことも珍しくない

ただし、いきなり落とすのは危険。
そこで必要になるのが “DB負荷の根本改善”


🔍 インスタンスサイズを落とすために行った改善(実務)

✔ Performance Insights でスロークエリを炙り出す

RDSの負荷のほとんどは “数本の重いクエリ” が支配している。

  • CPU が跳ねるクエリ
  • 待機時間が多いクエリ
  • JOIN で無駄に重くなるクエリ

これらを Performance Insights で可視化し、
一つずつ改善 → 負荷がみるみる下がる。


✔ INDEX の改善(付けすぎ/足りないの両方を解消)

INDEX がないと Full Scan 祭り。
INDEX が多すぎると更新が重くなる。

  • WHERE に必要な INDEX
  • JOIN に必要な INDEX
  • 不要 INDEX の削除

これだけで CPU / IO の両方が軽くなる → サイズダウンの余地が増える


✔ 取得量の見直し(チャンク処理・部分取得・段階取得)

でかいクエリ 1 発で DB に大ダメージが入ることがよくある。

そこで:

  • 大量取得 → チャンク(分割)処理へ
  • 巨大JOIN → 段階処理に変更
  • 必要カラムだけに絞る
  • LIMITの使い方を見直す

これを徹底しただけで、
CPU負荷が明確に下がり、1サイズ落とせる余地ができた


✔ クエリ回数そのものを減らす(N+1撲滅・キャッシュ導入)

1回のクエリが軽くても、回数が多ければ重い。

  • キャッシュの活用
  • 結果セットの再利用
  • N+1 の解消
  • API集約サーバでまとめて取得する設計

これもインスタンス最適化に直結した。


💳 RDSは SP ではなく RI の方が相性がいい(重要)

EC2 編では SP(Savings Plans)を推したけれど、
RDS に関しては RI(Reserved Instances)が圧倒的に向いていると感じている。

理由はシンプル:

▶ DB は「止められない前提」

夜間停止で節約できる EC2 と違い、
RDS は 24時間稼働が基本。

▶ DB の負荷は安定しており、変動が小さい

Compute SP のように柔軟性は不要で、固定割引モデル(RI)の方が割引効率が高い

▶ RI は RDS 専用の割引 → SP より深い割引になることが多い

まとめると:

観点 SP RI(RDS向き)
適用柔軟性 高い(EC2含む) 低い(DB固定向き)
割引率 1年で約36%前後 DBはさらに深く効くケース多い
稼働特性 変動に強い 固定稼働に強い=RDS向き

結論:RDSはRIでガッチリ割引をとるのが実務上は最適解になりやすい。


🤔 RI の“1年 or 3年”問題もあるけれど…

✔ 3年一括が最も割引率は高い

しかし…

✔ DBは世代更新の進化幅が大きい(r7 → r8 → r9…)

  • 新世代が毎年出る
  • 性能が20〜30%改善することもある
  • 価格が下がることもある
  • リージョン対応が遅れる場合もある

そのため、
3年固定は“旧世代にロックイン”されるリスクが大きい

僕の結論は:

RIは基本 1年カーブを採用し、毎年“世代・サイズ”を見直すのが最強。

EC2と同じく、柔軟性を残すほうがトータルで得。


⚠ 見落としがちだけど強力:ストレージ・IOPS の最適化

RDSはインスタンス代だけでなく、
ストレージ課金が地味に高い。

チェックポイント:

  • Provisioned IOPS が高すぎないか?
  • General Purpose (GP3) に落とせないか?
  • Backtrack が必要なのにONのままになってないか?
  • 長期バックアップの日数が多すぎないか?
  • 冗長に取られた自動バックアップが残ってないか?

ストレージは 減らした分だけずっと安くなるので、改善効果が継続する。


🎯 まとめ:RDSは「改善=直接コストが下がる」世界

  • 世代変更は土台の最適化
  • 本命は インスタンスサイズを落とすこと
  • そのためには SQL改善が最も効果的
  • ストレージ・IOPS は“気づかない課金”の本丸
  • RDSは SPよりRIの方が圧倒的に相性がいい

EC2より怖いけど、削れるときのインパクトはもっと大きい。
未来の自分へ:DBの改善はゆっくりでいいので、確実に続けよう。


🔜 次回

『コスト削減 - EFS・S3 編 -』

不意にたまってしまうストレージコストを削減したい!!

次回も“静かに効くコスト改善”を掘っていきます。

14
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?