タイトル: バックグラウンドプロセス
SEOタイトル: Oracle のバックグラウンドプロセス一覧(DBWR/LGWR/SMON/PMON/CKPT/ARCn)の役割
| この記事の要点 |
|
バックグラウンドプロセスとは
Oracle Database のインスタンスは、メモリ領域である SGA と複数のバックグラウンドプロセスの組み合わせで構成されます。バックグラウンドプロセスは、ユーザーが直接意識することなく、データの永続化・ログ出力・障害監視・チェックポイント処理などを並行して受け持つ常駐プロセス群です。アプリ側からの SQL を処理する「サーバープロセス」とは役割が分かれており、サーバープロセスが SGA 上で行った更新を、バックグラウンドプロセスが裏でディスクに反映していくイメージです。
主要なバックグラウンドプロセスの一覧
| プロセス | 正式名 | 役割 |
|---|---|---|
| DBWR (DBWn) | Database Writer | バッファキャッシュ上の更新済みブロックをデータファイルに書き出す |
| LGWR | Log Writer | REDO ログバッファの内容を REDO ログファイルに書き出す |
| SMON | System Monitor | インスタンス起動時のクラッシュリカバリ、未使用一時セグメントの解放 |
| PMON | Process Monitor | 異常終了したユーザープロセスのクリーンアップ、ロックや一時表のリリース |
| CKPT | Checkpoint | データファイルと制御ファイルのヘッダにチェックポイント情報を書き込む |
| ARCn | Archiver | 満杯になった REDO ログファイルをアーカイブログとして退避(アーカイブログモード時) |
| MMON / MMNL | Manageability Monitor | AWR スナップショット取得や統計情報の収集 |
| RECO | Recoverer | 分散トランザクションの未解決状態を解消 |
処理フローのイメージ
SQL UPDATE が来てから永続化されるまでの流れを追うと、各プロセスの役割が理解しやすくなります。
- サーバープロセスが SGA のバッファキャッシュ上でブロックを更新し、変更履歴を REDO ログバッファに書く
- COMMIT 時に LGWR が REDO ログバッファを REDO ログファイルへ書き出す(先に永続化)
- 条件が整うと DBWR が更新済みブロックをデータファイルに非同期で書き出す
- 定期的に CKPT がチェックポイントを進めて、データファイル/制御ファイルのヘッダを更新
- REDO ログが切り替わると ARCn がアーカイブログにコピー(アーカイブログモード時)
- インスタンス異常終了からの再起動時には SMON が REDO を適用してクラッシュリカバリを行う
プロセスの稼働状況を確認する
動的パフォーマンスビュー V$BGPROCESS を参照すると、起動中のバックグラウンドプロセスを一覧で確認できます。
-- 起動中のバックグラウンドプロセス一覧
SELECT name, description, paddr
FROM v$bgprocess
WHERE paddr <> '00';
-- 個別プロセスの状態(OS プロセス ID やステータス)
SELECT s.sid, s.serial#, p.spid, p.pname
FROM v$session s
JOIN v$process p ON s.paddr = p.addr
WHERE s.type = 'BACKGROUND';OS から見たプロセス
UNIX/Linux 系では、Oracle のバックグラウンドプロセスは ora_<プロセス名>_ のような名前で常駐しています。
$ ps -ef | grep ora_ | grep -v grep
oracle 1234 1 0 09:00 ? 00:00:00 ora_pmon_ORCL
oracle 1236 1 0 09:00 ? 00:00:00 ora_smon_ORCL
oracle 1238 1 0 09:00 ? 00:00:00 ora_dbw0_ORCL
oracle 1240 1 0 09:00 ? 00:00:00 ora_lgwr_ORCL
oracle 1242 1 0 09:00 ? 00:00:00 ora_ckpt_ORCL
oracle 1244 1 0 09:00 ? 00:00:00 ora_arc0_ORCL覚えておきたいポイント
- LGWR は「コミットされた変更を必ず先に REDO に書く」という、いわゆる WAL(Write-Ahead Logging)を担保するプロセス
- DBWR は性能のために遅延書き込みするので、データファイルが常に最新とは限らない(差分は REDO とチェックポイントで担保)
- PMON が居ないと、異常切断したセッションが握っていたロックが解放されない
- SMON が止まるとクラッシュリカバリができないためインスタンスとして致命的