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

データベースを裏方的な役割を担っているバックグラウンドプロセス。
簡単に言うと、SGA 内のバッファ領域とデータファイルや REDO ログファイル
などの I/O を管理している。

プロセスは多数存在するが、OS や Oracle のバージョン、使用している
オプション製品によって内容は異なる。例えば、ASM を使用している場合や、
RAC の場合は固有プロセスがあるため数が増える。



この中には、常時起動していなければならない必須プロセスもあれば、
必要に応じて Oracle が動的に起動するものもある。

命名規則は ora_<プロセス名>_<インスタンス名> のようになっていて、
以下のように ps コマンドで確認できる。

$ ps -ef | grep ora
$ ps -ef | grep <インスタンス名>

実行すると、沢山プロセスが出力されるので
見慣れていないとこれだけで抵抗感を覚えるかも知れないが、
まずは、必須プロセスは何か?その役割は何か?は押さえておきたいところ。

必須プロセスとその概要

ARCH (アーカイバ)

REDO ログファイルをアーカイブログファイルへコピーする。
ARCn の n に数字が入り、複数起動する場合 arc0、arc1・・・ となる。

ARCHIVELOGモード運用時、オンラインREDOログファイルが満杯になり、ログスイッチ
が発生すると、これまで使用していた直前のREDOログファイルの内容をコピーして
アーカイブREDOログファイルを作成する。

CKPT (チェックポイント)

メモリバッファとファイルの同期を取り、その時点のデータの整合性を保証する。

DBRM (リソースプランマネージャ)

リソースプランのタスクを管理する。(※11g以降)

DBWR (データベースライタ)

SGA のデータベースバッファキャッシュの内容をデータファイルに書き出す。
DBWn の n に数字が入り、複数起動する場合 dbw0、dbw1・・・ となる。
会話では デービーライタ と言ったりする。

変更済みのブロックを、データベースバッファキャッシュから
データファイルへ書き出す。活躍のタイミングは以下の通り。

  • 使用済みバッファ数がしきい値に達した
  • プロセスが要求する数のバッファが確保できない
  • タイムアウト
  • チェックポイント
  • LGWR (ログライタ)

    SGA の REDO ログバッファの内容を REDO ログファイルに書き出す。
    活躍のタイミングは以下の通り。

  • REDOログバッファ使用量が1/3を超えた
  • タイムアウト(3秒おき)
  • DBWnが書き込みを行う前
  • COMMIT時
  • MMAN (メモリマネージャ)

    SGA にあるコンポーネントのメモリサイズを管理する。(※10g以降)

    PMON (プロセスモニタ)

    他プロセスの回復やリソース開放を行う。
    個人的に会話では ピーモン と言ったりする。
    活躍のタイミングは以下の通り。

  • ユーザプロセス障害後、プロセス回復
  • トランザクションロールバック、ロック等のリソース開放
  • ディスパッチャ再起動
  • PSP0 (プロセス Spawner)

    起動やクリーンアップなど、バックグラウンドプロセスを管理する。(※10g以降)
    (10gR2 以前は PMON が起動していた)

    SMON (システムモニタ)

    インスタンス回復、リカバリを行う。
    活躍のタイミングは以下の通り。

  • インスタンス起動時にインスタンス回復
  • セグメントのクリーンアップ
  • データファイルの空き領域結合(エクステント結合)
  • VKTM (バーチャルキーパーオブタイム)

    時間の仮想キーパー。(※11g以降)
     

    どのプロセスを監視する?

    「必須プロセスが落ちている=障害」であるため、これらは ps コマンドを使って
    稼動監視にも使われている。監視対象プロセスを限定しなければならない場合、
    どれを監視すべきか?個人的には、他プロセスの面倒を見ている pmon を推している。