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模式逐漸會被淘汰的!
這句話是小布老師說的,我只是記錄。。。。
根據實際情況來確定,例如你就是2層架構,併發數又比較多,那就shared了~