メインコンテンツまでスキップ

パフォーマンス・チューニング

システム全体のパフォーマンスを理解し、改善するための知識を学ぶセクションです。


なぜパフォーマンスを学ぶのか

┌─────────────────────────────────────────────────────────────┐
│ 「なんか遅いんですけど」 │
├─────────────────────────────────────────────────────────────┤
│ │
│ この一言を聞いたとき、あなたはどう動けるか? │
│ │
│ パフォーマンスを知らない人: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 「えーと...どこだろう...」 │ │
│ │ 「とりあえずキャッシュ入れてみる?」 │ │
│ │ 「サーバー増やせばいいんじゃない?」 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ パフォーマンスを知っている人: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 「P99はどのくらい?いつから?」 │ │
│ │ 「APMでトレース見せて」 │ │
│ │ 「DBの接続プール使用率は?」 │ │
│ │ → 原因を特定し、的確に改善できる │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ パフォーマンスの知識は「問題解決の武器」になる │
│ │
└─────────────────────────────────────────────────────────────┘

学習の流れ

┌─────────────────────────────────────────────────────────────┐
│ 学習ロードマップ │
├─────────────────────────────────────────────────────────────┤
│ │
│ 基礎概念 │
│ ├── パフォーマンスの基礎 │
│ │ └── レイテンシ、スループット、P99 │
│ └── ボトルネックの見つけ方 │
│ └── どこから調べるか、USE/REDメソッド │
│ │
│ 計測 │
│ ├── 計測の技術 │
│ │ └── メトリクス、プロファイリング、トレーシング │
│ └── 負荷テスト │
│ └── テスト設計、ツール、結果の読み方 │
│ │
│ レイヤー別チューニング │
│ ├── アプリケーション層 │
│ │ └── コード最適化、キャッシュ、非同期処理 │
│ ├── データベース層 │
│ │ └── クエリ最適化、インデックス、接続プール │
│ ├── ネットワーク層 │
│ │ └── レイテンシ、帯域、接続管理 │
│ └── OS/インフラ層 │
│ └── CPU、メモリ、I/O、カーネルパラメータ │
│ │
│ 実践 │
│ ├── ローカル環境 vs クラウド環境 │
│ │ └── 環境差を考慮した計測・チューニング │
│ ├── 性能計測の実践テクニック │
│ │ └── 具体的な計測手法とツールの使い方 │
│ ├── 負荷テスト実践シミュレーション │
│ │ └── シナリオ形式で学ぶ調査・チューニングの流れ │
│ └── カオスエンジニアリング │
│ └── 障害注入による耐障害性の検証 │
│ │
└─────────────────────────────────────────────────────────────┘

ドキュメント一覧

基礎

#ドキュメント説明
01パフォーマンスの基礎レイテンシ、スループット、P99、リトルの法則
02ボトルネックの見つけ方USE/REDメソッド、どこから調べるか

計測

#ドキュメント説明
03計測の技術メトリクス、ログ、トレース、プロファイリング
04負荷テストテスト設計、ツール、結果分析

レイヤー別チューニング

#ドキュメント説明
05アプリケーション層コード最適化、キャッシュ、非同期処理
06データベース層クエリ最適化、インデックス、接続プール
07ネットワーク層レイテンシ削減、接続管理、プロトコル選択
08OS/インフラ層CPU、メモリ、I/O、カーネルチューニング

実践

#ドキュメント説明
09ローカル環境 vs クラウド環境環境差を考慮した性能テストの実践
10性能計測の実践テクニック具体的な計測手法とツールの使い方
11シナリオ設計の原則適切な負荷テストシナリオを設計するための考え方
12負荷テスト実践シミュレーションシナリオ形式で学ぶ負荷テストの流れ
13カオスエンジニアリング障害注入による耐障害性の検証

ケーススタディ

#ドキュメント説明
14統計テーブルのロック競合トランザクション内I/Oによるロック競合の特定と段階的改善

コラム

#ドキュメント説明
99早すぎる最適化は諸悪の根源いつ最適化すべきか

このセクションで学べること

考え方

トピック内容
計測ファースト推測ではなく計測に基づく改善
ボトルネック思考全体の1%を改善しても1%しか速くならない
トレードオフ速度 vs メモリ、レイテンシ vs スループット

指標

指標意味
レイテンシ1リクエストの応答時間
スループット単位時間あたりの処理量
P50/P95/P99パーセンタイル(中央値、95%点、99%点)
エラーレートエラーの割合

手法

手法用途
プロファイリングCPUやメモリの使用箇所特定
トレーシングリクエストの流れを追跡
負荷テスト限界性能の把握
A/Bテスト改善効果の検証

関連ドキュメント

JVM

PostgreSQL

Linux

ネットワーク