Oracle有2種模式:
Dedicated Server Process(專有模式)
Dedicated模式是預設的。類似銀行的VIP服務,一對一關系。
一個用戶端就需要一個Dedicated server。
用戶端不斷開與伺服器的連接配接,就會一直保持連接配接狀态。
響應和執行用戶端的請求。
由listener程序衍生出dedicated程序。
若資料庫的連接配接比較多,這種模式消耗的資源就很大了。
用戶端和伺服器的連接配接模式如下:

Shared Server Process (共享模式)
dispatcher相當于保安,一對多。
shared server相當于營業員,一旦shared有空閑,就去SGA的Request Queue中處理新的請求。
其中Request Queue全局隻有一個,Response Queue有多個。
用戶端和伺服器的連接配接如下:
1、用戶端連接配接到listener,
2、由listener确認是需要dedicated還是shared,若是dedicated就按照dedicated的模式進行。
若是shared的方式,就由listener按照一定的算法配置設定dispatcher,并傳回dispatcher的端口号給用戶端。
3、用戶端和dispatcheer進行連接配接。
優點:
極大的降低負責和前台處理的程序數。(每個dispatcher程序可以連接配接250個用戶端請求。)
增加了possible users
實作負載均衡
減少了idle server的程序數
降低了對記憶體的要求
Request Queue全局隻有一個,Response Queue有多個。
dedicated的PGA包含的資料很多,PGA比較小。
shared的SGA較大。
如何配置Shared server?
配置初始化參數:
dispatchers=”(protocol=tcp)(dispatchers=2)(protocol=ipc)(dispatchers=1)”
上述意思:啟動2個dispatcher程序,都是tcp/ip模式,再啟動一個IPC。
MAX_DISPATCHERS=N
最大多少個dispatcher程序。
該參數是靜态的,負荷大不會增加,負荷小也不會減少。
每個dispatcher支援250個連接配接。
shared_servers =6
最小多少個shared程序。
MAX_shared_servers =10
最多多少個shared程序。
這2個參數是動态的,
預設啟動6個shared,負荷大了就繼續啟動shared,最多10個。負荷小了就減少shared到6個。
CIRCUITS=100
定義了整個oracle中virtual circuits的個數。包括(inbound和outbound)進出的總和。
shared_server_sessions=100
定義了shared server能夠處理的session的個數
如果以上參數在初始化檔案中沒有定義,隻有先修改spfileSID之後,才能用alter system參數修改。
先create pfile from spfile;
shutdown immediate;停掉資料庫
修改initSID之後,
create spfile from pfile;
然後啟動資料庫 startup。
可以show parameter dispatcher和show parameter shared檢視。
用ps –ef | grep oracle可以檢視到具體啟動了shared_servers個程序。
關于驗證,用lsnrctl services 指令檢視即可。
如上是正确的。
關于用戶端連接配接
修改用戶端tnsnames.ora檔案,增加一行 server=shared/dedicated 即可:
我自己測試的 貌似出問題了~~!
待我好好研究下~~
以下三種情況 要使用dedicated模式:
1.送出批處理(submit batch jobs)負載較大,沒有空閑時間。
2.執行一下特殊操作(例如用sys登入,執行startup、shutdown等操作)
3.三層架構中,建議使用dedicated的模式。
上世界90年代,網絡架構一般都是2層模式,為了增加更多的并發連接配接,shared模式大行其道。
現在2層架構已經沒落,3層架構蓬勃發展。
shared模式逐漸會被淘汰的!