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/Oiostat の 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% 以上になることを目標にする。
MySQL — my.cnf
[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 まで拡張可能。
Shell — I/O 確認
iostat -x 1 10
# await: I/O 待機時間(ms)。10ms 超え → ボトルネック候補
# %util: デバイス使用率。80% 超えで飽和気味
mysql -e "SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';"

③ CPU コア数増強(並列クエリ)

SQL — PostgreSQL 並列クエリ設定
-- 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% が継続
ストレージ %utiliostat -x≥ 80% が継続
ストレージ awaitiostat -x≥ 10ms が継続
CPU 使用率mpstatP95 ≥ 60%

まとめ

項目要点
最優先スケールアップメモリ増強(バッファプール拡張)。ヒット率 99% 以上が目標
次点IOPS 増強。書き込みが多いワークロードでは必須
CPU は後回しまずインデックス・クエリチューニングを実施してから判断
スケールダウンI/O とバッファヒット率を 2 週間以上観察してから実施