Dispatcher 與 CMAN(Connection Manager)都與「連線管理」和「資源優化」有關,但它們運作的位置目的完全不同。

簡單來說:Dispatcher 是「內勤」,負責資料庫內部的效率;CMAN 是「外勤」,負責進出大門的交通引導與安全檢查。


1. 核心區別與關係

特性Dispatcher (分發器)CMAN (連線管理器)
運作模式Shared Server (共享伺服器模式) 的核心元件。獨立的 Proxy (代理伺服器) 軟體。
運作位置資料庫執行個體 (Instance) 內部。獨立伺服器 或中間層機器上。
主要功能將大量 Client 連線分配給少數的 Shared Server Process,節省資料庫記憶體。網路過濾 (Firewall)、連線匯集 (Multiplexing)、協議轉換。
與 Client 關係Client 直接連到資料庫時,Dispatcher 負責接待。Client 連到 CMAN,CMAN 再幫 Client 連到資料庫。

2. 它們如何協作? (Session Multiplexing)

這是兩者產生關係的最常見場景:連線匯集(Session Multiplexing)

當你有數千個用戶端要連線,但又不希望資料庫建立數千個網路連線時:

  1. 用戶端通通連向 CMAN

  2. CMAN 將這些成千上萬的連線「打包(Multiplexing)」,壓縮成少數幾個實體網路連線,發往資料庫。

  3. 資料庫端必須配置 Dispatcher。Dispatcher 會接收 CMAN 打包過來的連線,並在資料庫內部將其分發給後端的 Shared Servers 處理。

公式: 大量 ClientCMAN (漏斗)少量網路連線Dispatcher (分發)Shared Servers


3. 什麼時候該用誰?

  • 只用 Dispatcher:

    • 你的伺服器記憶體 (RAM) 不夠,無法為每個連線都開一個專屬進程 (Dedicated Process)。

    • 連線大多是「閒置多、做事少」的類型(如一般 OLTP 系統)。

  • 只用 CMAN:

    • 你需要網路防火牆功能(限制特定 IP 才能連資料庫)。

    • 你的 Client 與 Database 處於不同網段,需要一個跳板(Proxy)。

    • 你需要將資料庫隱藏在內網(Security)。

  • 兩者並用:

    • 極高併發環境(例如 5,000+ 個連線)。

    • 既要節省網路頻寬(CMAN 匯集),又要節省資料庫主機記憶體(Dispatcher)。

總結

Dispatcher 解決的是「資料庫進程太多導致記憶體爆炸」的問題;而 CMAN 解決的是「網路連線太多、不夠安全或路徑不通」的問題。

ORACLE