| この記事の要点 |
|
サーバープロセスとは
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 / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- MariaDB Monitor (mysql コマンド) の使い方 2026-10-14 15:21:02
- MariaDB の管理ツール (phpMyAdmin / DBeaver 等) 2026-10-14 15:21:02
- Google Custom Search JSON API|新規受付終了・移行期限と既存実装の確認 2026-10-14 14:50:13
- MySQL rootの初期パスワード確認|導入方式・Docker既存DB・復旧の注意 2026-10-14 14:39:34
- MySQL root パスワードの変更方法(ALTER USER / mysqladmin / パスワード忘れ時の復旧) 2026-10-14 14:39:34
- MySQL ALTER USER の使い方|パスワード変更・アカウントロック 2026-10-14 14:39:34
- MySQL ERROR 1129|ホスト遮断の原因・カウンタ・解除前の確認 2026-10-14 14:04:49
- MySQL ERROR 1820・1862|期限切れパスワードの安全な更新と確認 2026-10-14 14:04:49
- MySQL ERROR 1698|ソケット認証・OSユーザー・接続経路の確認 2026-10-14 14:04:49
- mysql_configが見つからない|mysqlclientの旧ビルドとpkg-configの確認 2026-10-14 13:36:32
- MySQLエラー一覧|番号・SQLSTATE別の原因と安全な確認手順 2026-10-14 13:36:32
- インストール直後にNetbeansが反応しない 2026-10-14 13:07:02
- NetBeans でよくあるエラー一覧と対処法 — JDK / Tomcat / PHP / メモリ不足 2026-10-14 13:07:02
- Apache NetBeans入門|起動JDK・プロジェクト作成・関連手順 2026-10-14 13:07:02
- 【Laravel】ページング(ページネーション)をする方法 2026-10-14 12:31:44