Oracle MTS (Multi-Threaded Server,後更名為 Shared Server) 以共享服務進程取代專用進程,在不增加物理記憶體前提下支援更多併發連線。典型場景:2GB 記憶體需支援 2000 連線,專用模式每連線 150-200KB PGA,MTS 僅 3-4MB 總共享,極大緩解記憶體壓力。
| 比較項 | MTS (Shared Server) | Dedicated Server |
|---|---|---|
| 服務進程模式 | 多連線共享一進程 | 每連線一專用進程 |
| 單連線記憶體 | 3-4 MB (共享 SGA) | 150-200 KB (私有 PGA) |
| 適用場景 | 高併發、短小請求的 OLTP | 資源充足、長時間運算、DSS/倉庫 |
| CPU 負載 | 增加調度開銷,CPU 瓶頸時不宜 | 低調度開銷 |
| 進程數量 | 大幅減少作業系統進程 | 線性增長 |
| 會話狀態 | UGA 移至 SGA (Large Pool) | UGA 在 PGA |
| 參數 | 說明 | 建議起始值 |
|---|---|---|
| DISPATCHERS | 分派器配置,協定/服務/數量 | (PROTOCOL=TCP)(DISPATCHERS=5) |
| SHARED_SERVERS | 共享服務進程初始數量 | CPU 核心數 × 2 |
| MAX_SHARED_SERVERS | 最大共享服務進程數 | 預期最大併發 / 20 |
| SHARED_SERVER_SESSIONS | 允許 MTS 的最大會話數 | 總預期併發 |
| LARGE_POOL_SIZE | UGA 移至 Large Pool,避免衝擊 Shared Pool | 併發數 × 1MB 起估 |
| CIRCUITS | 虛擬電路最大數 | MAX_SHARED_SERVERS × 50 |
-- 1. 設定初始化參數 (spfile)
ALTER SYSTEM SET DISPATCHERS='(PROTOCOL=TCP)(DISPATCHERS=5)' SCOPE=SPFILE;
ALTER SYSTEM SET SHARED_SERVERS=10 SCOPE=SPFILE;
ALTER SYSTEM SET MAX_SHARED_SERVERS=100 SCOPE=SPFILE;
ALTER SYSTEM SET LARGE_POOL_SIZE=200M SCOPE=SPFILE;
ALTER SYSTEM SET SHARED_SERVER_SESSIONS=2000 SCOPE=SPFILE;
-- 2. 重啟實例生效
SHUTDOWN IMMEDIATE;
STARTUP;
-- 3. 驗證
SELECT * FROM V$DISPATCHER;
SELECT * FROM V$SHARED_SERVER;
SELECT * FROM V$QUEUE; -- 請求/回應佇列狀態
V$QUEUE.WAIT 持續增長 → 增加 SHARED_SERVERSV$DISPATCHER.BUSY_RATE > 50% → 增加 DISPATCHERSV$SGASTAT 確認 Large Pool free memory > 20%SERVER=DEDICATED in TNS)SQLNET.EXPIRE_TIME 清理死連線-- MTS 連線 (預設若啟用 MTS)
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=...)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=orcl)(SERVER=SHARED)))
-- 強制專用連線 (報表/批次專用)
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=...)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=orcl)(SERVER=DEDICATED)))
MTS 以「共享」換取「規模」,是高併發 OLTP 系統突破記憶體牆的利器。科學配置參數、持續監控佇列、混合連線策略,方能發揮最大效益。