連線處理三種架構
| 架構 | 進程模型 | 適用場景 | 優點 | 缺點 |
| 1. 單任務 / User-Server 合一 | 單一 OS 進程同時執行用戶程式碼與 Oracle 核心 | 嵌入式、單用戶工具、無網路堆疊 OS | 零 IPC 開銷、極簡部署 | 無法多用戶並發、缺乏隔離、已淘汰 |
| 2. 專用伺服器 | 每個用戶進程對應一個專用 Server Process | OLTP 高併發、長交易、需高隔離、中小規模 | 資源獨享、效能穩定、除錯簡單 | 進程數線性增長、記憶體佔用大、擴展性受限 |
| 3. 共用伺服器 (MTS) | 多用戶進程共享少量 Dispatcher + Shared Server 進程 | 大量短連線、Web 應用、連線池輔助、記憶體受限 | 進程數大幅減少、支援更多並發用戶、SGA 共用 | 長交易阻塞 Shared Server、程式設計需避免佔用過久、除錯複雜 |
專用伺服器架構細節
- 用戶進程 ↔ 專用 Server Process 1:1。
- 網路層:Listener 接收請求 → Fork/Spawn 專用進程 → 交給專用進程處理。
- 適用:`DEDICATED` 服務名稱、`SERVER=DEDICATED` TNS 參數。
共用伺服器架構細節
核心進程角色
- Listener:判斷請求類型,導向 Dispatcher 或建立專用進程。
- Dispatcher (Dnnn):接收用戶請求,放入 **SGA 共用請求佇列**,回傳結果給用戶。每種網路協議至少一個。
- Shared Server (Snnn):從請求佇列取任務,執行 SQL,結果放入 **Dispatcher 回應佇列**。不綁定特定用戶,無 Session 狀態(Session 數據在 SGA)。
請求流程
- 用戶發送請求 → Dispatcher。
- Dispatcher 寫入 SGA **Common Request Queue**。
- 閒置 Shared Server 讀取請求 → 執行 → 寫入 **Dispatcher Response Queue**。
- Dispatcher 讀取回應 → 發送給用戶。
動態調整
- Oracle 依請求佇列長度自動啟動/關閉 Shared Server(參數 `SHARED_SERVERS`、`MAX_SHARED_SERVERS`)。
- Dispatcher 固定數量(`DISPATCHERS` 參數),建議 `(CPU核心數 × 2)` 起步。
SGA 共用結構差異
| 項目 | 專用伺服器 | 共用伺服器 |
| UGA (User Global Area) | 在 PGA (Process Private Memory) | 在 SGA (Shared Pool / Large Pool) |
| 排序區 | PGA (`SORT_AREA_SIZE`) | SGA (`SORT_AREA_RETAINED_SIZE` / Large Pool) |
| 游標狀態 | PGA | SGA |
**共用伺服器必須配置 Large Pool**,避免 UGA 掠奪 Shared Pool 導致 ORA-04031。
參數設定速查
# 專用伺服器(預設)
# 無特殊參數,視作業系統進程限制
# 共用伺服器啟用
DISPATCHERS = "(PROTOCOL=TCP)(DISPATCHERS=4)"
SHARED_SERVERS = 10
MAX_SHARED_SERVERS = 100
SHARED_SERVER_SESSIONS = 500
CIRCUITS = 2000
LARGE_POOL_SIZE = 100M # 必須設定
選型決策樹
- 用戶數 < 500、長交易多、記憶體充足 → **專用伺服器**。
- 用戶數 > 1000、Web 短連線、記憶體受限 → **共用伺服器**。
- 混合負載 → **預設專用,特定服務名啟用共用**(`(SERVER=SHARED)`),應用層連線池決定走哪條路徑。
現代演進
- 11g+ **Database Resident Connection Pool (DRCP)**:共用伺服器進階形態,跨進程/實例共用已認證 Session,更適合 PHP/Python/Node.js 等無連線池語言。
- 12c+ **Multitenant (CDB/PDB)**:資源管理在 Container 層面,共用/專用伺服器配置可在 PDB 級別差異化。
- 上一篇文章: Oracle 9i Linux 安裝換盤卡死:cdrom 目錄被佔用導致 umount 失效的解決
- 下一篇文章: Oracle 9i 管理伺服器(OMS)實現資料匯入匯出完整指南
Copyright ©
程式碼之家 All Rights Reserved