首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 資料庫連線架構深度解析:專用伺服器 vs 共用伺服器

     編輯:Oracle 教學

Oracle 資料庫連線架構深度解析:專用伺服器 vs 共用伺服器

Oracle 提供兩種連線模式,本質是「一對一」與「多對一」的進程映射關係差異,直接影響 PGA 記憶體佔用、並發擴展性與延遲特性。

核心對比

維度專用伺服器共用伺服器
進程模型1 User Process ↔ 1 Server ProcessN User Processes ↔ M Shared Server Processes (M ≪ N)
記憶體每 Session 獨佔 PGA(排序、雜湊、游標區)PGA 移至 SGA (UGA),共用進程間切換上下文
適用場景長事務、複雜查詢、高併發 OLTP、需會話級資源隔離短小頻繁交易、連線池受限、大量閒置連線、記憶體受限環境
延遲無排隊,固定低延遲可能因 Dispatcher/Shared Server 排隊增加微小延遲
預設值SHARED_SERVERS = 0(關閉)需顯式啟用

配置與驗證實戰

1. 專用伺服器模式(預設)

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

2. 啟用共用伺服器模式

-- 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...)

3. 客戶端 TNS 配置差異

# 專用連線 (預設)
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)))

4. 關閉共用伺服器(立即斷開所有共用連線)

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)。

選型決策樹

  1. 連線數 < 5,000 且記憶體充足 → 專用伺服器(簡單、穩定、預設)。
  2. 連線數 > 10,000、多為短查詢、PGA 總量超過實體記憶體 70% → 評估共用伺服器。
  3. 使用連線池(UCP/DRCP/WebLogic Pool)時,專用模式通常已足夠,DRCP(Database Resident Connection Pool)是 11g+ 更現代的替代方案。

總結:專用伺服器是 90%+ 生產環境的最佳預設;共用伺服器是解決「連線風暴+記憶體不足」的特定手術刀,需配合完整負載測試後謹慎啟用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved