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: バッファキャッシュヒット率 2 SELECT 3 sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) AS ratio 4 FROM pg_statio_user_tables; 5 6 -- MySQL: バッファプールヒット率 7 SHOW STATUS LIKE 'Innodb_buffer_pool_read%';
MVCC(多版型同時実行制御)
MVCCは各トランザクションがデータのスナップショットを見る仕組み。 読み取りがロックを取得しないため、高い並行性を実現。
PostgreSQL
タプルに可視性情報を保持。VACUUMで不要タプルを回収。
MySQL InnoDB
Undo Logで過去バージョンを保持。Purge Threadで回収。
SRE/インフラ観点
チューニングポイント
- • バッファプールサイズを適切に設定
- • WAL/Redo Logの配置(高速ディスク推奨)
- • チェックポイント頻度の調整
監視項目
- • バッファキャッシュヒット率(99%以上が理想)
- • チェックポイント時間
- • WAL生成量
- • VACUUM/Purgeの実行状況