建立 Oracle 資料庫時面臨的首個架構決策即連線模式選擇:專用伺服器或共享伺服器。本文深度對比兩種模式的架構原理、記憶體管理、擴展性、適用場景,並提供配置查詢、模式切換與共存實戰指南。
| 維度 | 專用伺服器 | 共享伺服器 |
|---|---|---|
| 連線對應 | 一對一:每用戶進程對應一專用伺服器進程 | 多對一:調度器分派請求給共享伺服器池 |
| 進程建立 | Listener 收到請求即時 fork 新進程 | 資料庫啟動時預建進程池 |
| UGA 儲存位置 | PGA (Program Global Area) | SGA (System Global Area) - Large Pool |
| 記憶體增長 | 線性增長,連線數 × PGA | 受控增長,共享池固定大小 |
| 請求處理流程 | 用戶進程 → 專用伺服器 → DB | 用戶 → 調度器 → 請求佇列 → 共享伺服器 → 回應佇列 → 調度器 → 用戶 |
專用伺服器 = 專車:全程專屬服務,等待時佔用資源,適合長途、固定行程。
共享伺服器 = 叫車服務:下車即釋放車輛,資源共用,適合短途、突發、高併發場景。
-- 參數檢視
SHOW PARAMETER shared_server;
-- 會話級別檢視
SELECT p.program, s.server
FROM v$session s, v$process p
WHERE s.paddr = p.addr;
若 shared_servers > 0 則啟用共享模式;SERVER 欄顯示 DEDICATED 或 SHARED。
shared_servers、dispatchers 等參數large_pool_size 存放 UGA實際生產最佳實踐:同時啟用兩種模式,透過連線描述符指定:
(SERVER=SHARED)(SERVER=DEDICATED)客戶端 TNSNAMES 範例:
OLTP_DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL=TCP)(HOST=...)(PORT=1521))
(CONNECT_DATA =
(SERVICE_NAME=oltp)
(SERVER=SHARED)
)
)
DW_DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL=TCP)(HOST=...)(PORT=1521))
(CONNECT_DATA =
(SERVICE_NAME=dw)
(SERVER=DEDICATED)
)
)
| 場景特徵 | 推薦模式 |
|---|---|
| 開發/測試環境、連線數少、長查詢多 | 專用 |
| 生產 OLTP、併發 > 1000、短查詢為主 | 共享 |
| 混合負載(OLTP + DW) | 雙模共存 |
| 前端已有連線池 | 專用(避免雙層池化) |
| 記憶體極度受限 | 共享 |
沒有絕對優劣,只有場景適配。現代硬體資源豐富下,專用模式因簡單可靠仍為主流;共享模式在極高併發、記憶體受限、需硬性限制並發度時不可或缺。掌握雙模共存技巧,才是資深 DBA 的架構智慧。