【oracle笔记】dedicated servers和shared servers基础

补充一个基础系列,呵呵,我也来打个比方 :)


假如你来到一个城市,要在这个城市的不同的地方办几件事情,在交通方面你有两种选择:一个是雇一辆专车,这辆专车将会把你从A带到B,一直等你把在B的事情办完,在把你从B带到C。。。。。。

另一种选择是给出租车公司打电话订辆出租车,先把你从A带到B,然后你和出租车该干嘛干嘛,你去办你的事情,出租车去接别的生意,等你在B的事情办完了,你再跟出租车公司订车,出租车公司将会联系当时在B附近的其他出租车去接你。。。。。。

这里专车相当于dedicated servers,订车相当于shared servers。

对于dedicated servers,当你连接到Oracle上,Oracle将会为你创建一个server process,这个process忠心,耐心而且相当高效,他只为你服务,即使你只是在屏幕前发呆,他也耐心等你的指示,所以你在dedicate server里经常可以看到server process在那里闲着没事干-----没办法,因为这就是当前user process的状态。由于专有的server process直接和你联系,你们之间的沟通是很有效率的。

对于shared servers,Oracle事先就准备好了一组shared server processes,这些shared server processes和专有的server process做相同的事情,只不过做的方式上略有不同。当你和Oracle建立起连接后,你并不是直接和这些shared server processes联系(如果是的话,shared servers的效率就和dedicated servers一样高了),你首先需要先把你的请求提交给一个dispatcher进程(Oracle可以创建多个dispatcher进程),dispatcher把你的request防到request queue里然后再找一个合适的shared process处理你的请求。当你的请求被完成后将会被放到一个response queue里,dispatcher再负责把response queue里的结果告诉你。

所以shared server processes并不知道你是谁,所以也没有耐心可言,他们总是忙着做一件又一件事情,关于效率,由于用户进程并不是直接和shared server process直接打交道,所以效率上会差一些。
在dedicate servers,你要做的事情完全是你个人的事情,只有你对应的server process才知道。这时候你的所有的隐私都是放在PGA里的。
在shared servers里由于需要能够让你的事情可以让所有的shared server processes处理,所以你的很多隐私都是共享的,即放在SGA里。所以在相同条件下相对于dedicated servers,shared servers的PGA明显要小得多。(然而对SGA的需求变大了)

讲了这么多,大家应该已经大致知道了dedicate servers和shared servers的特点,那么,问题是,我们到底该用哪一种呢?或者都用?
我想这个决定肯定是要结合你的具体情况,让我们进一步对比dedicate servers和shared servers:

首先,dedicated servers的设置非常简单-----不需要设置,这个是oracle的默认选项

而对于shared servers,你就要需要做一些额外的设置,当让按照administrator guide并不难,关键是你需要决定到底需要多少个shared server servers和多少个dispatcher,这不仅仅需要经验的积累,还需要持续的观察和调整。
在dedicated servers里,你所有的等待都是数据库本身的等待,而在shared servers里你有可能需要等待一个available的shared server process。

很明显,当用户并发的连接数很大的时候,dedicated servers的server process个数也会变得很大,对于操作系统来说多一个process就意味着多一点管理负担,要知道操作系统支持的同时并发数可不是无限的。这意味着,在dedicate servers里,当你有大量的用户连接(比如,同一时间超过5000个用户连上来),你的系统负担就会相当大。而这种情况shared servers就可以处理的相对好一些,因为加入同时有5000个用户连上来而且我们知道一般只有1%的连接是active,那我们只需要设置50个shared servers就可以把所有的用户请求处理得很好,并节省了系统资源。

作为一个好处,shared servers可以用来控制concurrent。要知道用户的并发数和系统的处理能力决不是成正比的(可以下面的图),当用户并发数超过一个阀值,系统的处理能力会明显下降。通过shared servers可以控制系统的concurrent不超过这个阀值。

在引入PGA的自动管理以前,shared servers是要比dedicated servers节省内存的,然后在自动管理的PGA引入之后,shared servers的这个优势已经不像我们想象的那么不明显了。

dedicate servers一个server process为了一个较大的request而长时间的工作而不影响其它的users,然而在shared servers,一些较大的request会影响其它的用户。

还需要考虑其他的因素,比如,如果在前端使用了weblogic的connecting pool,那么你在database level再使用shared servers可能就不是很必要,因为这时你的用户连接已经在weblogic层面上得到了控制。

shared servers还有一个所谓的伪死锁的问题,这点大家参考一下tom的新书就知道了。


关于dedicated servers和shared servers的话题我们就讨论这么多,最后给大家一个小提示:其实dedicated servers和shared servers是可以并存的,实际上,即使你使用了shared servers,某些管理操作也是必须在dedicated 模式下来做的,比如startup或shutdown database。如果你实在难以选择,如果你的应用可能一部分是OLTP的(用户量也很大),一部分是DW的,其实你可以考虑同时使用dedicated servers和shared servers。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值