Oracle 連接模式判斷:專用服務器 vs 共享服務器
一、架構差異
| 維度 | 專用服務器 | 共享服務器 |
| 進程模型 | 每用戶進程對應一個服務器進程 | 多用戶進程共享一組服務器進程 |
| 內存佔用 | 高 (PGA 獨佔) | 低 (PGA 共享,UGA 在 SGA) |
| 適用場景 | 長連接、複雜操作、DBA 維護 | 海量短連接、Web 應用、連接池 |
| 啟用參數 | 默認 | SHARED_SERVERS > 0 + DISPATCHERS |
二、雙端配置決定最終模式
最終連接模式由 **服務端參數** 與 **客戶端 TNSNAMES.ORA** 共同決定:
| 服務端 SHARED_SERVERS | 客戶端 TNS (SERVER=) | 結果模式 |
| = 0 (默認) | SHARED / 未設置 | DEDICATED |
| = 0 | DEDICATED | DEDICATED |
| > 0 | DEDICATED | DEDICATED (客戶端強制) |
| > 0 | SHARED / 未設置 | SHARED |
三、驗證當前會話模式
-- 當前會話
SELECT server FROM v$session WHERE sid = USERENV('SID');
-- SERVER 列值:DEDICATED / SHARED / NONE
-- 系統級統計
SELECT name, value FROM v$sesstat WHERE statistic# = (SELECT statistic# FROM v$statname WHERE name = 'shared server connections');
四、配置最佳實踐
- 現代 Web 應用:應用層連接池 (HikariCP/Druid) + 數據庫**專用服務器** 模式,簡單可靠、避免共享服務器複雜調優。
- 極高併發短連接 (無連接池 legacy):啟用共享服務器,設置
SHARED_SERVERS=10、MAX_SHARED_SERVERS=100、DISPATCHERS="(PROTOCOL=TCP)(DISPATCHERS=5)"。
- 強制專用:TNS 配置
(SERVER=DEDICATED),確保關鍵批處理/報表不佔用共享資源。
- 監控指標:
V$QUEUE (請求隊列)、V$DISPATCHER (分發器負載)、V$SHARED_SERVER (共享服務器忙碌率)。
五、常見誤區
- 以為設置
SHARED_SERVERS > 0 就自動生效 → 必須同時配置 DISPATCHERS 且客戶端不強制 DEDICATED。
- 共享服務器適用所有場景 → 大排序、大並行、長事務會阻塞共享服務器,反而拖慢整體。