Oracle 提供兩種連線模式,本質是「一對一」與「多對一」的進程映射關係差異,直接影響 PGA 記憶體佔用、並發擴展性與延遲特性。
| 維度 | 專用伺服器 | 共用伺服器 |
|---|---|---|
| 進程模型 | 1 User Process ↔ 1 Server Process | N User Processes ↔ M Shared Server Processes (M ≪ N) |
| 記憶體 | 每 Session 獨佔 PGA(排序、雜湊、游標區) | PGA 移至 SGA (UGA),共用進程間切換上下文 |
| 適用場景 | 長事務、複雜查詢、高併發 OLTP、需會話級資源隔離 | 短小頻繁交易、連線池受限、大量閒置連線、記憶體受限環境 |
| 延遲 | 無排隊,固定低延遲 | 可能因 Dispatcher/Shared Server 排隊增加微小延遲 |
| 預設值 | SHARED_SERVERS = 0(關閉) | 需顯式啟用 |
SHOW PARAMETER SHARED_SERVERS;
-- SHARED_SERVERS = 0
-- 連線驗證
SELECT SERVER FROM V$SESSION WHERE SID = (SELECT DISTINCT SID FROM V$MYSTAT);
-- 回傳: DEDICATED
-- 追蹤對應 OS 進程
SELECT PADDR FROM V$SESSION WHERE SID = 125;
SELECT PID, SPID FROM V$PROCESS WHERE ADDR = '393C5774';
-- PID=19, SPID=4848 為該 Session 專屬 Shadow Process
-- 1. 設定共用伺服器進程數
ALTER SYSTEM SET SHARED_SERVERS = 5 SCOPE=BOTH;
ALTER SYSTEM SET MAX_SHARED_SERVERS = 20 SCOPE=BOTH;
ALTER SYSTEM SET SHARED_SERVER_SESSIONS = 20 SCOPE=BOTH;
-- 2. 配置 Dispatcher(調度器)——必須項,否則共用模式不生效
ALTER SYSTEM SET DISPATCHERS = '(PROTOCOL=TCP)(DISPATCHERS=2)' SCOPE=BOTH;
-- 或指定特定服務: '(PROTOCOL=TCP)(DISPATCHERS=2)(SERVICE=oltp_svc)'
-- 3. 驗證
SELECT * FROM V$SHARED_SERVER; -- 顯示 S000~S004 等共用進程
SELECT SERVER FROM V$SESSION WHERE SID = 9; -- 回傳: SHARED
-- 追蹤電路:Session -> Dispatcher -> Shared Server
SELECT * FROM V$CIRCUIT WHERE SADDR = (SELECT SADDR FROM V$SESSION WHERE SID=9);
-- 可見 DISPATCHER 位址,進而查找對應 Dispatcher 進程 (D000, D001...)
# 專用連線 (預設)
MYDB_DED = (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=178.20.121.96)(PORT=1521))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=jing)))
# 共用連線 —— 必須指定 SERVER=SHARED,且服務名需為動態註冊
MYDB_SHR = (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=178.20.121.96)(PORT=1521))
(CONNECT_DATA=(SERVER=SHARED)(SERVICE_NAME=jing)))
ALTER SYSTEM SET SHARED_SERVERS = 0 SCOPE=BOTH;
ALTER SYSTEM SET MAX_SHARED_SERVERS = 0 SCOPE=BOTH;
-- 所有 SHARED 模式 Session 即刻中斷
V$SHARED_SERVER_MONITOR:監控共用進程忙碌率、請求排隊時間。V$DISPATCHER_RATE:Dispatcher 吞吐率、網路等待。V$QUEUE:COMMON/REQUEST 佇列長度,持續 >0 表示共用進程不足。SHARED_SERVER_SESSIONS 達上限,新共用連線將被拒絕(ORA-00018/00020)。總結:專用伺服器是 90%+ 生產環境的最佳預設;共用伺服器是解決「連線風暴+記憶體不足」的特定手術刀,需配合完整負載測試後謹慎啟用。