ある企業が AWS 上で稼働する EC2 + ALB + RDS Aurora PostgreSQL のアーキテクチャを運用しています。最近、トラフィックの急増によりデータベースの CPU 使用率が慢性的に 80% 以上になり、レスポンスタイムが悪化しています。調査の結果、読み取りクエリが全体の 85% を占めており、多くは同じクエリが繰り返されていることが判明しました。アプリケーションコードの変更を最小限にして最もコスト効率よくパフォーマンスを改善するには、どの方法が適切ですか?
- A. RDS Proxy を追加してコネクションプーリングを改善し、Aurora Performance Insights で遅いクエリを特定して最適化する
- B. Aurora DB クラスターのインスタンスタイプをより大きなサイズにスケールアップする
- C. Aurora のリードレプリカを 2 〜 3 台追加し、アプリケーションのデータベース接続をライターエンドポイントとリーダーエンドポイントに分離する。さらに ElastiCache for Redis または Memcached をキャッシュ層として追加し、繰り返しクエリの結果をキャッシュする
- D. Aurora をシャーディングして複数のクラスターに分散し、アプリケーション側でシャーディングロジックを実装する
解答と解説を見る
正解: C
読み取り 85% のワークロードにはリードレプリカの追加とリーダーエンドポイントへの接続分離が効果的です。さらに同一クエリの繰り返しが多いため、ElastiCache でクエリ結果をキャッシュすることで DB への読み取り負荷を大幅に削減できます。Aurora のリーダーエンドポイントはコード側での最小限の変更(接続文字列の切り替え)で対応できます。 B: スケールアップは即効性がありますが、読み取り 85% の根本原因に対処せず、コストも高くなります。いずれ再びボトルネックに達します。 D: シャーディングは複雑な実装と大規模なコード変更が必要で、現状の読み取り負荷問題への解決策として過剰です。 A: RDS Proxy はコネクション数の最適化に有効ですが、CPU 使用率 80% の根本原因である大量の読み取りクエリ負荷そのものを軽減しません。パフォーマンス改善の主要手段にはなりません。
📚 関連サービスの解説: Amazon Aurora ・ Amazon ElastiCache