RDBMSとは

RDBMS = Relational Database Management System。データを「行」と「列」を持つ表(テーブル)として管理する仕組みです。

  • テーブル同士をキーで関連付け(リレーション)、整合性を保ちながら検索・更新できる。
  • ユーザは SQL(宣言型言語)で要求を伝え、DBエンジンが最適な実行方法(実行計画)を選ぶ。
  • 複数ユーザの同時アクセスを安全に処理するため、トランザクションロック を備える。
  • 障害から復旧するために REDO/UNDO といったログ機構を持つ。

RDBMSが担うこと

  • SQL 解析・最適化
  • 実行・データ取得
  • 同時実行制御(Lock)
  • 永続化と障害回復(REDO/UNDO)
  • セキュリティ・監査

クライアント・サーバ構成

アプリ(クライアント)はネットワーク経由でDBサーバに接続し、SQLを送って結果を受け取ります。

  • 接続はTCP上のDB専用プロトコル(Oracle Net / PG wire / TDS / DRDA など)
  • 1接続 ≒ 1セッション(1サーバプロセス/スレッド)
  • 接続コストは大きい ⇒ 必ずコネクションプール
アプリ ↔ DBの間に「リスナー」がいて、接続要求をサーバプロセスへ取り次ぐイメージ。
// 概念図
App (Client) ──SQL──> Listener ──> Server Process
                                       │
                              ┌────────┴────────┐
                              │ DB Server (Instance) │
                              │  SGA (共有メモリ)       │
                              │   ├ Buffer Cache       │
                              │   └ REDO Buffer        │
                              │  Background Processes  │
                              └────────┬────────────────┘
                                       ↓
                          Storage (データファイル/ログ/制御)

インスタンスとデータベース

インスタンス (Instance) = メモリ + プロセス群

  • サーバ起動時に確保される共有メモリ領域と、それを利用するDBエンジンのプロセス集合。
  • SQLの解析、キャッシュ管理、ログ書き出し、チェックポイントなどはここで動く。
  • 再起動すると揮発する状態(メモリ・キャッシュ)。
  • 1台のサーバに複数インスタンスを動かすことも可能。

データベース (Database) = ディスク上のファイル群

  • データファイル / 制御ファイル / REDOログ等のディスク上の永続データの集合体。
  • インスタンスを停止しても消えない(永続)。
  • 1つのDBに対し、複数インスタンスから接続する構成(RAC/共有DBクラスタ)も存在する。
  • バックアップとリストアの単位もこのレイヤ。
POINT 「データベースを止めた」と言うとき、実は「インスタンスを止めた」だけのことが多い。

メモリ構造(共有メモリとセッションメモリ)

共有メモリ(SGA 相当)

  • Buffer Cache: テーブル/インデックスのブロックをキャッシュ。読み書きは原則このキャッシュ経由で行われる。
  • REDO Log Buffer: 更新変更履歴を一時的に保持。コミット時等にディスクのREDOログへ書き出される。
  • Shared Pool: SQLの解析結果(実行計画)、辞書情報、PL/SQLなどをキャッシュ。同一SQLの再利用効率に直結。
  • その他: Large Pool / Java Pool / 結果キャッシュなど、製品により様々。

セッション専用メモリ(PGA 相当)

  • 接続中のセッションごとに確保
  • ソート/ハッシュ結合の作業域
  • カーソル状態・バインド変数
  • 大きくなりすぎると一時表領域へ溢れる(Disk Sort / Spill to disk)⇒ パフォーマンスを大きく左右

バックグラウンドプロセス

インスタンスは表に出ない多くの常駐プロセスを内包します。代表的なものを以下に示します。

  • DBWR / Writer: バッファキャッシュ上の汚れたブロックをデータファイルに書き出す。
  • LGWR / Log Writer: REDOログバッファをオンラインREDOログに書き出す。コミットの中核。
  • CKPT / Checkpoint: 整合点を作成し、データファイルに「ここまで反映済」と記録。
  • ARCH / Archiver: 満杯になったオンラインREDOをアーカイブログへコピー(アーカイブモード時)。
  • SMON / System Mon: 再起動時のリカバリ、一時セグメントの解放など。
  • PMON / Process Mon: 異常終了したセッションのクリーンアップ、ロックの解放など。
プロセス名は製品により異なるが「役割」はほぼ共通です。