タイトル: プロセス
SEOタイトル: Oracle Database のプロセス完全ガイド(ユーザプロセス / サーバプロセス / バックグラウンドプロセスの違い)
| この記事の要点 |
|
Oracle における「プロセス」とは
Oracle Database では、データベースインスタンスを構成する要素のひとつとしてプロセスがあります。プロセスとは OS 上で動作する実行単位で、Oracle はインスタンス稼働中に多数のプロセスを協調動作させて SQL の実行や永続化を行っています。
プロセスは目的によってユーザプロセス・サーバプロセス・バックグラウンドプロセスに分類されます。
3 種類のプロセス
| 種類 | 動作場所 | 役割 |
|---|---|---|
| ユーザプロセス | クライアント側 | SQL の送信、結果の受け取り |
| サーバプロセス | DB サーバ側 | SQL を実際に実行(パース・実行・フェッチ) |
| バックグラウンドプロセス | DB サーバ側 | インスタンスの維持(書き出し・ログ・回復など) |
ユーザプロセス
ユーザプロセスはクライアントアプリケーション(SQL*Plus / SQL Developer / Java / Python など)が Oracle と通信するために生成するプロセスです。SQL を送る側であり、SQL の実行そのものは行いません。
クライアントとサーバが別マシンの場合はクライアント側マシンで動作し、Oracle Net 経由でサーバプロセスと通信します。
サーバプロセス
サーバプロセスはクライアントの代理として SQL を実行するプロセスで、DB サーバ側で動作します。
専用サーバ構成(dedicated)
1 つのユーザプロセスに対して 1 つのサーバプロセスが割り当てられる構成です。シンプルで応答性が高く、多くの環境で既定になっています。同時接続数が増えるとサーバプロセスも増えるため、メモリ消費に注意が必要です。
共有サーバ構成(shared / MTS)
少数のサーバプロセスを複数のユーザプロセスで共有する構成です。DISPATCHER がリクエストを受けて空きサーバプロセスに振り分けます。多接続環境でメモリを節約できる代わりに、トランザクションごとの応答時間にばらつきが出ます。
主なバックグラウンドプロセス
バックグラウンドプロセスはインスタンスの基盤を支える常駐プロセス群です。種類はバージョンで増減しますが、代表的なものは次の通りです。
| プロセス | 正式名 | 役割 |
|---|---|---|
SMON | System Monitor | インスタンス回復、一時セグメント整理 |
PMON | Process Monitor | 異常終了したユーザプロセスの後始末 |
DBWn | Database Writer | データバッファのダーティブロックをデータファイルへ書き出し |
LGWR | Log Writer | REDO ログバッファを REDO ログファイルへ書き出し |
CKPT | Checkpoint | チェックポイント発生時にヘッダ情報を更新 |
ARCn | Archiver | REDO ログをアーカイブログとしてコピー |
MMON | Manageability Monitor | AWR・統計情報の収集 |
RECO | Recoverer | 分散トランザクションの障害回復 |
プロセスの確認方法
OS から見ると Oracle のプロセスは ora_xxx_SID という名前で見えます。
# Linux でバックグラウンドプロセスを一覧
ps -ef | grep ora_ | grep ORCL
# 例:
# oracle ora_pmon_ORCL
# oracle ora_smon_ORCL
# oracle ora_dbw0_ORCL
# oracle ora_lgwr_ORCL
# oracle ora_ckpt_ORCL
Oracle 内部からは v$process / v$session ビューで確認できます。
-- 起動中のプロセス一覧
SELECT pname, spid, program
FROM v$process
WHERE pname IS NOT NULL
ORDER BY pname;
-- セッションとサーバプロセスの紐付け
SELECT s.sid, s.username, s.program, p.spid
FROM v$session s
JOIN v$process p ON s.paddr = p.addr
WHERE s.username IS NOT NULL;
同時接続数とプロセス数の関係
同時接続数の上限は初期化パラメータ processes で決まります。専用サーバ構成では接続ごとに 1 プロセス消費するため、見積もりは余裕を持って設定します。
-- 現在の上限と使用中プロセス数
SHOW PARAMETER processes;
SELECT COUNT(*) FROM v$process;
プロセスとメモリ(SGA / PGA)の関係
Oracle のメモリ領域は共有領域とプロセス専用領域に分かれており、それぞれを使うプロセスが異なります。
| メモリ領域 | 使うプロセス | 用途 |
|---|---|---|
| SGA(System Global Area) | 全プロセスで共有 | データバッファ・共有プール・REDO ログバッファ |
| PGA(Program Global Area) | サーバプロセスごと | ソート領域・カーソル状態・セッション変数 |
SGA はインスタンス共通、PGA はサーバプロセスごとに独立です。同時接続数を増やすと PGA の合計が膨らむため、メモリ計画では pga_aggregate_target と接続数の積を考慮する必要があります。
プロセスの異常終了とリカバリ
サーバプロセスが何らかの理由でクラッシュした場合、PMON が後始末を行います。
- 未コミットのトランザクションを自動ロールバック
- 使っていたロックを解放
- セッションが保持していた一時資源をクリーンアップ
インスタンスごとクラッシュした場合は SMON が起動時にインスタンス回復を実行し、REDO ログから未反映の変更を再適用します。
関連
- データベースの構成 — 親カテゴリ
- Oracle — Oracle トップ
- インスタンス — メモリ + プロセスの組
- PGA — サーバプロセス専用メモリ
- バックグラウンドプロセス — 詳細記事