RDBサーバーの役割と特性
RDB(MySQL / PostgreSQL / Oracle)はトランザクション管理・整合性保証・SQL 実行を担う。メモリ(バッファプール)・ストレージ I/O・CPU の3リソースすべてがボトルネックになり得る最も複雑なサーバー種だ。スケールアップの効果が最も大きいのはメモリ増強であり、バッファプールにデータが乗り切れば I/O が激減してパフォーマンスが飛躍的に向上する。
ボトルネックになるリソース
| リソース | 症状 | 確認方法 |
|---|---|---|
| メモリ(バッファプール) | ディスク I/O が高止まり。Buffer Pool Hit Rate 低下 | MySQL: SHOW STATUS LIKE 'Innodb_buffer_pool%' |
| ストレージ I/O | iostat の await・%util が高い。クエリ全体が遅延 | iostat -x 1 10 |
| CPU | ソート・集計・フルスキャンで上昇 | top / SHOW PROCESSLIST |
| 接続数 | Too many connections エラー | SHOW STATUS LIKE 'Threads_connected' |
スケールアップの内容と効果
① メモリ増強(バッファプール拡張)
■ MySQL InnoDB バッファプールの目安
innodb_buffer_pool_size = 物理メモリ × 0.60〜0.75
例:64GB 搭載 → innodb_buffer_pool_size = 48G。Hit Rate(read_requests / reads)が 99% 以上になることを目標にする。
[mysqld]
innodb_buffer_pool_size = 48G
innodb_buffer_pool_instances = 8 # 16GB 超は複数インスタンス推奨
innodb_buffer_pool_chunk_size = 1G
② ストレージ I/O 強化(IOPS 増強)
■ 必要 IOPS の試算
必要 IOPS = TPS × 書き込み倍率(InnoDB: 約 2〜4)
例:TPS 1,000・倍率 3 → 3,000 IOPS。gp3 の 3,000 IOPS が目安。io1/io2 で最大 64,000 IOPS まで拡張可能。
iostat -x 1 10
# await: I/O 待機時間(ms)。10ms 超え → ボトルネック候補
# %util: デバイス使用率。80% 超えで飽和気味
mysql -e "SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';"
③ CPU コア数増強(並列クエリ)
-- postgresql.conf
max_parallel_workers = 8
max_parallel_workers_per_gather = 4
EXPLAIN (ANALYZE, BUFFERS) SELECT count(*) FROM large_table WHERE ...;
スケールダウンの考え方
⚠️ DBサーバーのスケールダウンは慎重に
バッファプール削減でそれまでメモリに乗っていたデータが I/O に戻り、突発的な性能劣化が起きやすいです。必ず閑散期の低負荷時間帯に実施し、I/O 使用率を 1〜2 週間モニタリングしてから判断してください。
| 削減項目 | 安全に削減できる条件 |
|---|---|
| メモリ削減 | バッファプールヒット率 ≥ 99.5% を余裕を持って維持できる場合 |
| CPU コア削減 | CPU P95 ≤ 40% かつ並列クエリを使っていない場合 |
| IOPS 削減 | %util ≤ 30% かつ await ≤ 5ms が常態化している場合 |
スケールアップ vs スケールアウト(Read Replica)
RDB の書き込みはプライマリ1台に集中するため、スケールアウトは読み取りの分散(Read Replica)として活用するのが現実的だ。書き込みが増加する場合は垂直スケールアップが基本となる。
✅ RDB スケール戦略の優先順位
① クエリチューニング → ② バッファプール拡張 → ③ IOPS 増強 → ④ CPU 増強 → ⑤ Read Replica → ⑥ シャーディング(最終手段)
判断指標(監視メトリクス)
| メトリクス | 確認方法 | 目安 |
|---|---|---|
| バッファプールヒット率 | SHOW GLOBAL STATUS LIKE 'Innodb_buffer%' | ≤ 98% が継続 |
| ストレージ %util | iostat -x | ≥ 80% が継続 |
| ストレージ await | iostat -x | ≥ 10ms が継続 |
| CPU 使用率 | mpstat | P95 ≥ 60% |
まとめ
| 項目 | 要点 |
|---|---|
| 最優先スケールアップ | メモリ増強(バッファプール拡張)。ヒット率 99% 以上が目標 |
| 次点 | IOPS 増強。書き込みが多いワークロードでは必須 |
| CPU は後回し | まずインデックス・クエリチューニングを実施してから判断 |
| スケールダウン | I/O とバッファヒット率を 2 週間以上観察してから実施 |