| この記事の要点 |
|
サーバープロセスとは
Oracle Database には大きく 2 種類のプロセスがあります。バックグラウンドプロセス(DBWn / LGWR / SMON 等、DB 全体の保守を行う)と、サーバープロセス(個々のクライアント要求を処理する)です。サーバープロセスはユーザーセッションごとに SQL を受け取り、解析し、実行し、結果を返す役割を担います。
サーバープロセスの仕事
- クライアント(アプリケーション / sqlplus)から SQL を受信
- パース(構文解析・最適化)— ライブラリキャッシュ参照
- 必要なデータブロックをバッファキャッシュへロード(無ければデータファイルから物理読み込み)
- 実行— 結果セットを構築
- クライアントへ結果を返却
- INSERT/UPDATE/DELETE では REDO エントリを REDO バッファへ書き込み
サーバープロセスはデータファイルを直接書き込まないのがポイント。書き込みは DBWn(DB Writer)、REDO の永続化は LGWR(Log Writer)といったバックグラウンドプロセスが担当します。
接続モード: 専用サーバーと共有サーバー
| 項目 | 専用サーバー(Dedicated) | 共有サーバー(Shared / MTS) |
|---|---|---|
| 対応関係 | クライアント 1 : プロセス 1 | 多 : 少(プール) |
| 仲介 | 無し(直結) | ディスパッチャ + リクエストキュー |
| PGA 配置 | サーバープロセス内 | SGA の Large Pool 内(UGA) |
| 応答速度 | 高速・安定 | キュー待ちが発生しうる |
| リソース効率 | 接続数に比例して増える | 同時接続数が多い OLTP に有利 |
| 典型用途 | 長時間バッチ / 業務 | 大量の短時間 OLTP |
専用サーバーの流れ
クライアントが接続要求 → リスナー(Listener)が新しいサーバープロセスを起動 → 以後そのクライアント専用に SQL を処理。切断時にプロセスも終了。
共有サーバーの流れ
クライアントが接続要求 → リスナーが空いているディスパッチャへ振り分け → ディスパッチャがリクエストをキューへ → 共有サーバープロセスがキューから取り出して処理 → レスポンスをキュー経由で返却。
関連メモリ構造(PGA / UGA)
| 領域 | 内容 | 専用サーバーでの場所 | 共有サーバーでの場所 |
|---|---|---|---|
| PGA | セッション固有の作業領域(ソート / ハッシュ等) | サーバープロセス内 | サーバープロセス内 |
| UGA | セッション変数 / カーソル状態 | PGA 内 | SGA の Large Pool 内 |
| SGA | バッファキャッシュ / 共有プール / REDO バッファ等 | 共有 | 共有 |
確認コマンド
-- セッション一覧(サーバープロセス含む)
SELECT s.sid, s.serial#, s.username, s.machine,
s.program, s.server, s.status, p.spid AS os_pid
FROM v$session s
JOIN v$process p ON p.addr = s.paddr
WHERE s.username IS NOT NULL;
-- 接続モード(DEDICATED / SHARED)
SELECT username, server, count(*)
FROM v$session
WHERE username IS NOT NULL
GROUP BY username, server;
-- PGA 使用状況
SELECT name, value/1024/1024 AS mb
FROM v$pgastat
WHERE name IN ('total PGA allocated','total PGA inuse','maximum PGA allocated');
OS から見たサーバープロセス
Linux/Unix では oracle<SID>_<SPID> または ora_* のような名前で見えます。v$process.spid が OS の PID と対応するため、性能トラブル時は top / ps と突き合わせて特定します。
# 専用サーバーのプロセス
$ ps -ef | grep oracle | grep LOCAL
oracle 12345 1 0 10:00 ? 00:00:01 oracleORCL (LOCAL=NO)
関連トラブルと対処
| 症状 | 原因 / 対処 |
|---|---|
| ORA-12500 / ORA-12520(プロセス起動失敗) | OS の nproc 上限 / Oracle の processes 上限超過。拡張する |
| ORA-04030(PGA メモリ不足) | 大きなソートや CLOB 処理で PGA 不足。pga_aggregate_target 増、SQL チューニング |
| セッションが切れない | アプリのコネクションリーク。プール設定見直し / SQLNET.EXPIRE_TIME |
| 共有サーバーで遅い | ディスパッチャ / 共有サーバープロセス不足。dispatchers / shared_servers 増 |
専用と共有を切り替える
-- 現在の設定を確認(init.ora / spfile)
SHOW PARAMETER dispatchers;
SHOW PARAMETER shared_servers;
-- 共有サーバーを有効化(例: TCP のディスパッチャを 4 個、共有サーバーを 8 個)
ALTER SYSTEM SET dispatchers='(PROTOCOL=TCP)(DISPATCHERS=4)' SCOPE=BOTH;
ALTER SYSTEM SET shared_servers=8 SCOPE=BOTH;
-- クライアント側の接続文字列でも明示できる
-- (SERVER=DEDICATED) / (SERVER=SHARED)
専用サーバーがデフォルトで、明示的に共有サーバーを設定しない限りクライアント接続は常に専用です。短い OLTP が数千〜数万セッション飛んでくるシステムでは共有サーバーが効きますが、解析用 / 集計用のセッションは専用のままにします。
ライフサイクル
- クライアントがネットワーク経由でリスナーに接続要求
- リスナーがサーバープロセスをfork / spawn(専用)または既存ディスパッチャに振る(共有)
- 認証成功後、サーバープロセスがクライアントと直接通信開始
- クライアントから
EXIT/ コネクション断 → サーバープロセス終了 / プールに戻る
関連
- プロセス — 親カテゴリ
- バックグラウンドプロセス — DBWn / LGWR / SMON など
- PGA — プログラム・グローバル領域
- SGA — システム・グローバル領域
- リスナー / tnsnames.ora — クライアント接続
子ページ
子ページはありません
同階層のページ
- ユーザープロセス
- サーバープロセス
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09