ちょっと気になったのでまとめてみた。(SQLServerはちょっと内容薄め..ww)
主な特徴
- Oracle 高額なライセンスフィーだが高機能。RACは独自機能。
- SQLServer Microsoftのお膝元。
- MYSQL シンプルかつ軽量。高速にSQL文を処理することで定評。
- Postgre 拡張性重視。小さいサービスなどに使われることが多い。
プロセス管理
マルチプロセス:クライアントからの接続毎にプロセスを起動する。特定のプロセスに問題があっても影響範囲が少ない。
マルチスレッド:単一のプロセスで動き、クライアントからの接続毎にスレッドが作成。(スレッドの方がオーバーヘッド少ないと言われる。)
- Oracle マルチプロセス。必須プロセスと接続毎に起動するサーバープロセスで構成される。インスタンスとは独立してクライアントから接続を受けるリスナープロセスも存在。
- SQLServer マルチスレッド。
- MYSQL マルチスレッド。
- Postgre マルチプロセス。postmasterという管理者プロセスがあり、これが落ちるとおしまい。
メモリ管理
- Oracle プロセス共有のメモリとコネクション単位のメモリがあり、パラメーターで指定可能。
- SQLServer ローカルメモリのみ。インスタンスで最大と最小のメモリ数を指定するシンプルなやりかた。
- MYSQL 全体管理のグローバルバッファ、スレッド毎のバッファ、ログバッファに分割。グローバルバッファはテーブルやインデックスを管理。多数の接続があると競合を防ぐ目的で分割することもある。
- Postgre プロセス共有のメモリとSQL文実行のメモリ領域に分かれる。
ストレージ
通常、RDBMSはテーブル等情報を保存するデータファイル領域と差分データを保存するストレージを持つ。ストレージはクラッシュ時のリカバリに使われる。
- Oracle ストレージ管理用インスタンスを使うことができる。DBはそれが管理するディスクグループにファイルを保存。データファイルは初期サイズ等設定可能。ストレージはパスの指定が可能。
- SQLServer シンプルな構成で、少数ファイルから成り立つ。DB単位でデータファイルを作成。TXログは動的サイズかつ単一のファイル(他のRDBMSは固定の複数ファイルを循環利用する)
- MYSQL 複数のストレージエンジンを利用可。ストレージは任意のデータディレクトリに保存。トランザクションログとして、バイナリログとInnoDBがあり、前者はレプリケーション用のイベント、後者はクラッシュ時のロールフォーワードで使われる。
- Postgre ファイルシステムの階層構造をそのままDBに利用。単一のデータベースクラスタ上に保存する。レコードが更新前のデータはそのまま保持され、バキューム処理で領域の開放がなされる(MySQL/Oracleでは更新時には更新前データはロールバック・セグメントに移動される)