バックグラウンドプロセスの役割
データベースを裏方的な役割を担っているバックグラウンドプロセス。
簡単に言うと、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 ログファイルに書き出す。
活躍のタイミングは以下の通り。
MMAN (メモリマネージャ)
SGA にあるコンポーネントのメモリサイズを管理する。(※10g以降)
PMON (プロセスモニタ)
他プロセスの回復やリソース開放を行う。
個人的に会話では ピーモン と言ったりする。
活躍のタイミングは以下の通り。
PSP0 (プロセス Spawner)
起動やクリーンアップなど、バックグラウンドプロセスを管理する。(※10g以降)
(10gR2 以前は PMON が起動していた)
SMON (システムモニタ)
インスタンス回復、リカバリを行う。
活躍のタイミングは以下の通り。
VKTM (バーチャルキーパーオブタイム)
時間の仮想キーパー。(※11g以降)
どのプロセスを監視する?
「必須プロセスが落ちている=障害」であるため、これらは ps コマンドを使って
稼動監視にも使われている。監視対象プロセスを限定しなければならない場合、
どれを監視すべきか?個人的には、他プロセスの面倒を見ている pmon を推している。