【Oracle】バックグラウンドプロセス完全ガイド|DBWR・LGWR・CKPT・SMON・PMON・ARCn の役割と監視まで解説

Oracle は複数のバックグラウンドプロセスが連携してデータベースを稼働させています。これらのプロセスはユーザーセッションとは独立して動作し、データ書き込み・ログ書き込み・リカバリ・アーカイブ・メモリ管理などを担当します。

バックグラウンドプロセスの役割を理解することは、パフォーマンス問題・障害発生時の診断に直結します。

この記事でわかること

  • 主要バックグラウンドプロセスの役割と動作タイミング
  • 各プロセスに関連する待機イベント・パラメータ・監視ポイント
  • V$BGPROCESS・V$SESSION・V$PROCESS でプロセス状態を確認する方法
  • プロセスが関係するトラブルの診断方法
スポンサーリンク

バックグラウンドプロセスの一覧を確認する

V$BGPROCESS で全バックグラウンドプロセスを確認する
-- 起動中のバックグラウンドプロセス一覧(V$PROCESS と結合)
SELECT
    b.name,         -- プロセス名(例: DBWR, LGWR, CKPT など)
    b.description,  -- プロセスの説明
    p.pid,          -- Oracle プロセス ID
    p.spid,         -- OS プロセス ID
    p.pga_used_mem / 1024 / 1024 AS pga_mb
FROM V$BGPROCESS b
JOIN V$PROCESS p ON b.paddr = p.addr
WHERE b.paddr != '00'   -- 実際に起動しているプロセスのみ
ORDER BY b.name;

-- セッションレベルで確認する場合(バックグラウンドセッション)
SELECT
    s.sid,
    s.program,
    s.status,
    s.event,
    s.seconds_in_wait
FROM V$SESSION s
WHERE s.type = 'BACKGROUND'
ORDER BY s.program;

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

DBWR / DBW0〜DBWn(Database Writer)

バッファキャッシュ上のダーティバッファ(変更済みブロック)をデータファイルに書き出すプロセスです。書き込みタイミングは以下のとき:

  • チェックポイント(CKPT からの指示)
  • バッファキャッシュが枯渇してきたとき(free buffer waits が発生)
  • タイムアウト(3秒ごと)
関連パラメータ・ビュー 内容
DB_WRITER_PROCESSES DBWR プロセス数(デフォルト1、CPUコア数に合わせて増やす)
V$SYSSTAT: “physical writes” 物理書き込み回数
待機: free buffer waits バッファキャッシュが不足してDBWRの書き込みを待っている状態

LGWR(Log Writer)

オンライン REDO ログバッファの内容をオンライン REDO ログファイルに書き出すプロセスです。書き込みタイミングは以下のとき:

  • COMMIT が実行されたとき(ユーザーは LGWR の書き込み完了を待つ)
  • REDO ログバッファが 1/3 以上埋まったとき
  • DBWR がデータファイルに書き込む前
  • 3秒ごとのタイムアウト
関連パラメータ・ビュー 内容
LOG_BUFFER REDO ログバッファのサイズ(デフォルト: 通常1〜8MB)
待機: log file sync COMMIT 時にユーザーセッションが LGWR の書き込み完了を待つ
待機: log buffer space REDO ログバッファが満杯でユーザーが書き込みを待つ
待機: log file parallel write LGWR がログファイルへの書き込みを待つ(I/O 速度が問題)

CKPT(Checkpoint)

チェックポイントを開始し、データファイルヘッダーと制御ファイルに最新の SCN(System Change Number)を記録します。DBWR への書き込み指示もチェックポイント処理の一部です。

チェックポイントはインスタンスリカバリ時に必要な REDO ログの量を決定します。FAST_START_MTTR_TARGET パラメータでチェックポイント頻度を制御できます。

SMON(System Monitor)

SMON は以下の重要な役割を持ちます:

  • インスタンスリカバリ:DB 起動時に REDO ログを適用してクラッシュ前の状態に復元する
  • 一時セグメントの解放:ソート・ハッシュ結合などで使った TEMP 領域のうち不要になったものを解放する
  • 空きエクステントの結合:辞書管理表領域(旧来の方式)で断片化した空きエクステントを結合する

PMON(Process Monitor)

ユーザープロセスやサーバープロセスが異常終了した後のクリーンアップを担当します:

  • 失敗したプロセスのロックを解放する
  • コミットされていないトランザクションをロールバックする
  • 使用中だったリソース(カーソル・メモリなど)を解放する
  • リスナーへのサービス登録を定期的に更新する(動的サービス登録)
PMON によるロールバックに時間がかかる場合
大きなトランザクションが途中でクラッシュすると PMON によるロールバックに長時間かかります。V$SESSIONPMON セッションや V$TRANSACTIONUSED_UBLK(使用中の UNDO ブロック数)を確認することで進捗をある程度把握できます。

ARCn(Archiver)

ARCHIVELOG モード時に、ログスイッチで使用済みになったオンライン REDO ログをアーカイブログとしてコピーします。アーカイブ先はローカルファイル・NFSマウント・FRA(Flash Recovery Area)などを指定できます。

関連パラメータ・ビュー 内容
LOG_ARCHIVE_MAX_PROCESSES ARCn プロセス数の上限(デフォルト4)
LOG_ARCHIVE_DEST_n アーカイブ先の設定(最大 31 宛先)
V$ARCHIVED_LOG 生成済みアーカイブログの一覧
V$ARCHIVE_DEST アーカイブ宛先の設定と状態
待機: log file switch (archiving needed) アーカイブが追いつかず次のグループが使えない

MMON・MMNL(Manageability Monitor)

MMON はパフォーマンス管理機能を担当します:

  • AWR スナップショットの定期的な取得(デフォルト 60 分ごと)
  • ADDM(自動診断)の実行
  • メトリクス収集とアラートの発行(DBA_OUTSTANDING_ALERTS / V$ALERT_TYPES)

MMNL はメモリ上の ASH(Active Session History)データを AWR に書き出す役割を担います。

MMAN(Memory Manager)

ASMM・AMM モードで SGA コンポーネントを自動調整します。バッファキャッシュが足りなければ共有プールを縮小してバッファキャッシュに割り当てるなどの調整を行います。V$SGA_DYNAMIC_COMPONENTSlast_oper_type(GROW/SHRINK)でその動作を確認できます。

CJQ0・Jnnn(Job Queue Coordinator / Worker)

DBMS_SCHEDULER・DBMS_JOB のジョブを実行するプロセスです。CJQ0 がコーディネーターとして実行タイミングを管理し、Jnnn(J000〜)が実際のジョブ処理を行います。

まとめ — バックグラウンドプロセスと待機イベントの対応関係

プロセス 主な役割 関連する代表的な待機イベント
DBWR ダーティバッファをデータファイルへ書き出し free buffer waits(バッファ不足)
LGWR REDO ログバッファをオンライン REDO ログへ書き出し log file sync(COMMIT 待ち)、log buffer space
CKPT チェックポイント実行・SCN を制御ファイルに記録 log file switch (checkpoint incomplete)
SMON インスタンスリカバリ・一時セグメント解放
PMON 失敗プロセスのロール バック・リソース解放
ARCn redo ログのアーカイブコピー log file switch (archiving needed)
MMON AWR スナップショット・ADDM・アラート
MMAN SGA 自動メモリ管理(GROW/SHRINK)
CJQ0/Jnnn DBMS_SCHEDULER ジョブの実行

待機イベントの詳細は 待機イベント(Wait Events)完全ガイドを参照してください。オンライン REDO ログの管理手順は オンライン REDO ログ完全ガイドを参照してください。AWR・ADDM での分析は AWR・ASH完全ガイドを参照してください。