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了~
转载于:https://blog.51cto.com/caidao/741047