RDBMSアーキテクチャ

ストレージエンジン、WAL、バッファプール

RDBMSの構成要素

SQL Parser / Optimizer← クエリ解析・最適化
Executor← クエリ実行
Buffer Pool / Cache← メモリキャッシュ
Storage Engine← データ永続化
Data Files
WAL / Redo Log

ストレージエンジン

PostgreSQL

単一ストレージエンジン。ヒープテーブル + MVCC。 TOAST(大きな値の圧縮・外部格納)、テーブルスペースで物理配置制御。

MySQL

InnoDB(デフォルト)

ACID対応、行レベルロック、MVCC、外部キー対応

MyISAM(レガシー)

テーブルロック、フルテキスト検索、トランザクション非対応

WAL(Write-Ahead Logging)

WALはデータ変更を先にログに書き込む仕組み。 クラッシュリカバリとレプリケーションの基盤。

書き込みの流れ

トランザクション
WALに書き込み
COMMIT
データファイル(遅延)
PostgreSQL

WAL(pg_wal/)、チェックポイントで同期

MySQL InnoDB

Redo Log(ib_logfile*)、Undo Log

WALの利点

  • 耐久性: コミット時にWALが永続化されていれば復旧可能
  • 性能: シーケンシャル書き込みで高速
  • レプリケーション: WALを転送してスタンバイを更新
  • PITR: 任意の時点にリカバリ可能

バッファプール

バッファプールはディスク上のデータページをメモリにキャッシュ。 I/Oを削減し、クエリ性能を大幅に向上。

PostgreSQL

  • shared_buffers: 共有バッファ
  • • 推奨: RAM の 25%
  • • OSのページキャッシュも活用

MySQL InnoDB

  • innodb_buffer_pool_size
  • • 推奨: RAM の 70-80%
  • • 複数インスタンスに分割可能
1-- PostgreSQL: バッファキャッシュヒット率
2SELECT
3 sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) AS ratio
4FROM pg_statio_user_tables;
5
6-- MySQL: バッファプールヒット率
7SHOW STATUS LIKE 'Innodb_buffer_pool_read%';

MVCC(多版型同時実行制御)

MVCCは各トランザクションがデータのスナップショットを見る仕組み。 読み取りがロックを取得しないため、高い並行性を実現。

PostgreSQL

タプルに可視性情報を保持。VACUUMで不要タプルを回収。

MySQL InnoDB

Undo Logで過去バージョンを保持。Purge Threadで回収。

SRE/インフラ観点

チューニングポイント

  • • バッファプールサイズを適切に設定
  • • WAL/Redo Logの配置(高速ディスク推奨)
  • • チェックポイント頻度の調整

監視項目

  • • バッファキャッシュヒット率(99%以上が理想)
  • • チェックポイント時間
  • • WAL生成量
  • • VACUUM/Purgeの実行状況