Oracle进程_笔记3:专用服务器与共享服务器
专用服务器与共享服务器
1.什么时候使用专用服务器
在专用服务器模式中,客户连接与服务器进程之间存在一种一对一的映射。对于目前所有基于SQL的应用来说,这是应用连接Oracle数据库的最常用的方法。设置专用服务器最简单,而且采用这种方法建立连接也最容易,基本上不需要什么配置。
因为存在一对一的映射,所以不必担心长时间运行的事务会阻塞其他事务。其他事务只通过其自已的专用进程来处理。因此,在非OLTP环境中,也就是可能有长时间运行事务的情况下,应该只考虑使用这种模式。专用服务器是Oracle的推荐配置,它能很好地扩展。只要服务器有足够的硬件(CPU和RAM)来应对系统所需的专用服务器进程个数,专用服务器甚至可以用于数千条并发连接。
某些操作必须在专用服务器模式下执行,如数据库启动和关闭,所以每个数据库中可能同时有专用服务器和共享服务器,也可能只设置一个专用服务器。
2.什么时候使用共享服务器
共享服务器的设置和配置尽管并不困难,但是比设置专用服务器要多一步。不过,二者之间的主要区别还不在于其设置,而是操作的模式有所不同。对于专用服务器,客户连接和服务器进程之间存在一对一的映射。对于共享服务器,则有一种多对一的关系:多个客户对应一个共享服务器。
顾名思义,共享服务器是一种共享资源,而专用服务器不是。使用共享资源时,必须当心,不要太长时间独占这个资源。如前所示,在会话中使用一个简单的DBMS_LOCK.SLEEP(20)就会独占共享服务器进程20秒的时间。
如果独占了共享服务器资源,会导致系统看上去好像挂起了一样。
使用共享服务器时,可能还会观察到另一个有意思的现象,这就是人工死锁(artificial deadlock)。对于共享服务器,多个服务器进程被多个用户所“共享”,用户数量可能相当大。考虑下面这种情况,你有5个共享服务器,并建立了100个用户会话。现在,一个时间点上最多可以有5个用户会话是活动的。假设其中一个用户会话更新了某一行,但没有提交。正当这个用户呆坐在那里对是否修改还有些迟疑时,可能又有另外5个用户会话力图锁住这一行。当然,这5个会话会被阻塞,只能耐心地等待这一行可用。现在,原来的用户会话(它持有这一行的锁)试图提交事务,相应地释放行上的锁。这个用户会话发现所有共享服务器都已经被那5个等待的会话所垄断。这就出现了一个人工死锁的情况:锁的持有者永远也拿不到共享服务器来完成提交,除非某个等待的会话放弃其共享服务器。但是,除非等待的会话所等待的是一个有超时时间的锁,否则它们绝对不会放弃其共享服务器。
因此,由于这些原因,共享服务器只适用于OLTP系统,这种系统的特点是事务短而且频繁。在一个OLTP系统中,事务以毫秒为单位执行,任何事务的执行都会在1秒以内的片刻时间内完成。共享服务器对数据仓库很不适用,因为在数据仓库中,可能会执行耗时1分钟、2分钟、5分钟甚至更长时间的查询。如果采用共享服务器模式。其后果则是致命的。
当然,使用共享服务器还有一个很重要的原因,这就是有时你别无选择。许多高级连接特性都要求使用共享服务器。???如果你想使用Oracle Net连接池,就必须使用共享服务器。???如果你想在数据库之间使用数据库链接集合(database link concentration),也必须对这些连接使用共享服务器。
注意:如果你的应用中已经使用了一个连接池特性(例如,你在使用J2EE连接池),而且适当地确定了连接池的大小,再使用共享服务器只会成为性能“杀手”,导致性能下降。你已经确定了连接池的大小,以适应任何时间点可能的并发连接数,所以你希望这些连接都是直接的专用服务器连接。否则,在你应用的连接池特性中,只是“嵌套”了另一个连接池特性。
3.共享服务器的潜在好处
共享服务器主要为我们做3件事:减少操作系统进程/线程数,刻意地限制并发度,以及减少系统所需的内存。
???4.DRCP
那么,11g新增的特性DRCP呢?共享服务器有很多优点,比如可以减少进程(我们使用了池),节省内存而不引入任何缺点。绝对不会出现人工死锁;它没有共享服务器的多线程功能;一个客户进程从池得到一个专用服务器时,它将拥有该进程直到客户进程将它释放。因此,这对某些客户应用最为适合,这些客户应用需要频繁地连接,执行一些相对小的进程,再断开连接,周而复始,如此反复;简单地说,DRCP非常适用于API本身没有足够连接池的客户进程。
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5177.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
