专用服务器连接(dedicated server):
采用专用服务器连接时,会在服务器上得到针对这个连接的一个专用进程。客户连接与服务器进程/线程之间存在一对一的映射。这是应用连接Oracle数据库的最常用的方法,采用这个方式不用什么配置。
共享服务器(shared server):
采用共享服务器连接时,多个会话可以共享一个服务器进程池,其中的服务器进程由Oracle实例生成和管理。你所连接的是一个数据库调度程序(dispatcher),而不是特意为连接创建的一个专用服务器进程,调度程序负责从客户应用接受入站请求,并把它们放入SGA中的一个请求队列,第一个可用的共享服务器进程从队列中选择请求,并附加相关会话的UGA。共享服务器处理这个请求,把得到的输出放在相应队列中。调度程序一直监视着响应队列来得到结果,并把结果返回给客户应用。
如何配置共享服务器模式:
1.利用Oracle自带的Database Configuration Assistant工作进行配置共享服务模式。
2.修改连接模式为静态监听
什么时候适合使用专用服务器模式:
因为存在一对一的映射,所以不必担心长时间运行的事务会阻塞其他事务。其他事务通过其自己的专用进程来处理。因此,在非OLTP环境中,也就是可能有长时间运行事务的情况下们应该只考虑这种模式。
什么时候适合使用共享服务器模式:
首先共享服务器是一种共享资源,使用共享资源时,必须当心,不要长时间的占用这个资
源,若果独占了共享服务器资源,会导致系统看上去挂起来一样。例如三个客户在两个共享服务器中试图运行一个45S的进程,那么其中两个会在45S内得到响应,而第三个进程需要90S后才会得到响应。
共享服务器的原则:要确保事务的持续时间尽量短,事务可以频繁运行,但必须在短时间内执行完(这是OLTP系统的特点)。如果事务持续时间很长,这样共享资源被少数进程独占着,整个系统就像挂起来一样。
使用共享服务器,还有可能造成人工死锁,例如有5个共享服务器,并建立了100个会话,现在在一个时间点上最多可以有5个用户会话还是活动的,假如其中一个会话更新了一行,但没有提交,然后可能又有5个用户会话力图锁住这一行,当然这个五个会话会被阻塞。
这时,原来的用户会话试图提交事务,但发现所有的共享服务器已经被那5个会话垄断,这样就出现了人工死锁。锁的拥有者永远也拿不到共享服务器来提交。
基于上面的原因,共享服务器只适用于OLTP系统,这种系统的特点是短而频繁。而数据仓库不适用。如果你的系统90%是OLTP,10%是数据仓库,那么可以在一个实例上适当地混合适用专用服务器模式和共享服务器模式。这样可以大大减少机器上针对OLTP用户的服务器进程个数,并使得“OLAP”的用户不会独占共享服务器。
共享服务器的潜在好处:
1.减少操作系统线程/进程
2.刻意地限制并发度
3.减少系统所需的内存
总结:
除非你的系统负载过重,或者需要为一个特定的特性使用共享服务器,否则专用服务器可能最适合。
如果用户群很大,而且知道要部署共享服务器,建议先开发并测试这个共享服务器,要对系统进行压力测试,建立基准测试,确保应用使用共享服务器能很好的工作。