本文へスキップ
BecomeCoder

AWS SAP(ソリューションアーキテクト プロフェッショナル)コース · 第9章 既存システムの改善②:パフォーマンスとコスト最適化 · レッスン48

パフォーマンスのボトルネック分析と改善 ― 計測→特定→改善のループ

導入

本番が遅い、なんとかしてくれ」という依頼ほど厄介なものはありません。勘で手を打つと、直らないどころか別の問題を生みます。プロの改善は、必ず計測から始まります。

説明

パフォーマンス改善は、次の3ステップのループで進めます。

flowchart LR
    M["計測する<br/>(CloudWatch/X-Ray)"] --> S["ボトルネックを特定する"]
    S --> I["改善策を1つ適用する"]
    I --> M

1. 計測する。 CloudWatch のメトリクス(CPU/メモリ/レイテンシー/キューの深さ)と、AWS X-Ray による分散トレーシングで、「どのコンポーネントが遅いか」を可視化します。勘や経験則で「たぶんDBが遅い」と決めつけず、まず数字で確認します。

2. ボトルネックの種類を特定する。 典型的な原因と対策は次の通りです。

ボトルネックの種類症状典型的な改善策
CPU/メモリ不足インスタンスのCPU使用率が高止まり適切なインスタンスタイプへ変更、Auto Scaling
DBへの読み取り集中DB接続数・レイテンシーが高いキャッシュ(ElastiCache)、リードレプリカ
同期処理の直列待ちリクエストがタイムアウトする非同期化(SQS/EventBridge でキューイング)
不適切なサービス選択常時ポーリングでムダな待ちイベント駆動(Lambda + EventBridge)への置換
ネットワークの遠回りリージョンをまたぐ通信で遅延CloudFront、リージョン内完結の設計に見直し

3. 改善策を1つずつ適用し、再計測する。 複数の変更を同時に入れると、何が効いたか分からなくなります。1つ変えて、また計測する、を繰り返すのが定石です。

代表的な改善パターンとして、SAPで頻出なのが次の3つです。

  • キャッシュを挟む: ElastiCache(Redis/Memcached)や DAX(DynamoDB用)、CloudFront(静的コンテンツ)で、DBやオリジンへのアクセスを減らす。
  • 非同期化する: 即座に応答する必要がない処理は SQS でキューに積み、裏で処理する。リクエストの応答時間が短くなり、スパイクにも強くなる。
  • 適切なサービスへ置き換える: 常時起動のEC2でポーリングしていた処理を、イベント駆動のLambdaに置き換えるなど、ワークロードの性質に合ったサービスへ移す。

読んでみよう

SAPの性能改善問題は「このサービスを使えば速くなる」という単純な暗記では解けません。問題文から「何がボトルネックか」を読み取り、「計測→特定→改善」の順で考える癖をつけてください。選択肢に「キャッシュを追加する」と「インスタンスを大きくする」が並んでいたら、まず「読み取りが集中しているのか」「計算量そのものが多いのか」を問題文から見極めるのがコツです。