欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

oracle 专用服务器模式与共享服务器模式详解

程序员文章站 2022-07-16 10:48:09
...
一、共享服务器模式。

共享服务器模式,也叫做多线程服务器模式。在这种模式下,Oracle数据库允许多个用户进程共享非常少的服务器进程。所以,可以同时实现用户并发访问的人数也就大大的增加。

采用共享服务器模式的话,则多个用户可以共用一个服务器进程,也就是说,此时客户端进程与服务器进程是多对一的情况。这主要是通过调度程序来实现的。调度程序将多个加入数据库访问会话请求指引到一个共用队列。服务器进程共享池中某个闲置的共享服务器进程依次从队列中获得一个请求。也就是说,一个很小的服务器进程共享池可以为大量的客户机提供服务。

共享服务器连接是一种在程序编写的时候通常会用到的连接池(pool)的概念。采用这种模式的话,在数据库的初始化的时候就会创建一批服务器连接的进程,然后把这些连接进程放入一个连接池来进行治理。初始化的池中的进程数量在数据库初始化建立的时候是可以手动设置的。在连接建立的时候,Listener首先接受到客户端的建立连接的请求,然后Listener去生成一个叫做调度器(dipatcher)的进程与客户端进行连接。调度器把把客户端的请求放在SGA(系统全局域)的一个请求队列中,然后再共享服务器连接池中查找有无空闲的连接,然后让这个空闲的服务器进行处理。处理完毕以后再把处理结果放在SGA的相应队列中。调度器通过查询相应队列,得到返回结果,再返回给客户端。这种连接模式的优点在于服务器进程的数量可以得到控制,不大可能出现因为连接人数过多而造成服务器内存崩溃。但是由于增加了复杂度以及请求相应队列,可能性能上有所下降。

以下应用情景下,可以选择采用共享服务器模式

1、 前台客户端数量比较多。

当大量用户需要连接到数据库并且需要有效的使用可用的系统资源的时候,则需要考虑采用共享服务器模式。具体的来说,像现在采用的一些客户端/服务器端模式的网络应用软件,如ERP系统等等。一方面因为用户人数比较多;另一方面企业由于资金有限,所以购置的是一般的服务器。这些服务器由于硬件方面的一些限制,如数据库系统与前台应用服务器采用统一台服务器。所以往往要求数据库能够充分使用硬件资源,以减少两者之间的冲突。

2、 服务器内存限制比较大。

共享服务器模式下,当连接用户增加时,其内存使用率增加不会很多。因为他们共享一个服务器进程。所以,从这一个角度讲,共享服务器模式可以减少内存的使用。但在专用服务器模式下,内存的使用几乎与用户的数量成比例增加。

所以,用户若在一些老的服务器上部署Oracle数据库的话,因为其主板对内存的升级有所限制,所以,为了得到一个不错的数据库性能,往往采用共享服务器模式。如此,即时同时访问数据库的用户有所增加,其内存也不会有多大的影响。可以大大的降低内存的压力。

3、 某些特定功能要求采用共享服务器模式。

虽然说,共享服务器模式与专用服务器模式在大部分情况下,都是通用的,支持Oracle数据库系统的大部分功能。但是,某一些特定的功能,仍然需要数据库管理员在共享服务器模式下,才能够启用。比较典型的,如Oracle数据库服务器的连接共享、连接集中与负载均衡技术等等。他们必须在共享模式下才能够运行。

负载均衡用来在群集环境下实现多机共享数据库,以保证应用的高可用性。同时可以自动实现并行处理以及均分负载,还能够实现数据库在故障时的容错和无断点恢复。所以,在一些对于性能与稳定性要求比较高的应用场景中,如银行中,往往都会采用负载均衡技术。此时,数据库管理员在配置数据库的时候,就需要考虑采用共享服务器模式。

二、专用服务器模式。

专用服务器模式就是说每次在对Oracle进行访问的时候,Oracle服务器的Listener会得到这个访问请求,然后回为这个访问创建一个新的进程来进行服务。所以说,对于每一个客户端的访问,都会生成一个新的进程进行服务,是一种类似一对一的映射关系。这种连接模式的一个很重要的特点就是UGA(用户全局域)是存储在PGA(进程全局域)中的,这个特性也很好说明了当前用户的内存空间是按照进程来进行分配的。

在专用服务器模式下,数据库服务器要求每个用户拥有一个专用服务器进程。也就是说,每个服务器拥有一个服务器进程。数据库服务器把现有的服务器进程地质发回客户机,然后客户机将连接请求重新发送到提供的服务器地质,与专用服务器比较。专用服务器模式由于客户端与服务器端进程是一一对应的,所以,其性能上可能会比较有优势。但是,当用户比较多的时候,则其对服务器的硬件资源,特别是内存,会产生比较大的压力。

符合如下特征的话,采用专用年服务器模式能够取得比较好的效果

1、 只有少数客户端。

若连接到数据库的用户比较少,则专用服务器模式是首选。如企业前台是一个财务管理系统,则其使用的人数就会比较少。因为其往往只涉及到一个部门。但是,其数据量会比较多。因为我们知道,对于每一笔交易都需要在财务系统中进行详细的纪录。所以,虽然只是财务一个部门用,但是其纪录量往往是其他各个部门纪录量的总合。在纪录量多、连接用户又比较少的情况下,采用专用服务器模式,可以说是比较明智的选择。

2、 为数据仓库搭建的数据库系统。

数据仓库是数据库技术的一个非常典型的应用。他是一个面向主体、集成、时变、非易失的数据集和,是支持管理部门的决策过程。他跟Oracle数据库一样,都是关系型数据库,其中的纪录以表格的方式存储,并且能够用统一的结构化语言进行数据查询。采用数据仓库的主要目的,是为了及时完成业务处理,及时给与客户响应。

虽然说,关系数据库能够适应大型数据库应用的需要,但是,不能够将其简单的堆砌就直接成为数据仓库来使用。因为数据仓库主要用来处理多维数据。他存储纪录的方式跟普通的有所不同。数据仓库主要通过数组方式来存储纪录,即没有统一的规律可循,也没有统一的多维模型可循,他只恩能够购按其所属类别进行归类。虽然说传统的二维数据库不能够简单的堆砌来成为数据仓库。但是,在设计数据仓库的时候,并不是说要完全另起炉灶,而是可以利用现有的Oracle数据库系统来处理数据,从中进行信息的综合,从而构造出满足不同需要的数据仓库。

所以,如果这个数据库是为了实现数据仓库而搭建的,则必须要采用专用服务器模式。这是Oracle数据库的强制要求。

3、 联机事务处理系统。

联机事务处理系统,英文简称为OLTP。在这种应用下,采用什么模式为好呢?这在业界,没有统一的标准。有的说因为联机事务处理系统使用人数比较多,应该采用共享连接服务器模式;而有的又说联机处理系统对于及时性要求比较高,而共享服务器模式可能会有比较长的等待时间,所以应该采用专用连接服务器模式。笔者是比较倾向于后面这种意见。

联机事务处理系统,通常来说,有比较多的长事务与大事务。如用户的某几个操,必须作为一个事务处理等的观念。此时,若用户请求数大于共享服务器进程数的话,此时,就会发生排队现象。假设现在有一个共享服务器进程正在执行一个长事务,那么请求队列就需要一直等。直道这个事务完成为止。若从客户端的角度来讲,则客户请求的响应时间就加长了。所以,当用户的连接请求数比共享进程要多时,那么长事务的共享连接必将会造成共享进程的排队。事务越长,其排队的时间也就越长,用户响应的时间也就越长。如此恶性循环下去的话,很多联机事务作业都会受到不同程度的影响。所以,若联机事务处理系统统是符合两个条件(用户连接请求数大于共享进程并且其事务大部分是长事务或者大事务),则采用专用服务器连接模式比采用共享服务器连接模式效率要高。为了保障联机事务处理系统正常运行,笔者建议数据库管理员为其配置专用服务器连接模式。

总之,谈到两种连接方式的优点和缺点,真的是各有千秋。在专用服务器模式下,优点就是每个用户都有一个连接,所以大家不至于有的应用占着连接造成别的客户的请求给挂起了。而最大的缺点在于内存治理上,因为随着连接数的增加,每增加一个连接,就要分配一份PGA,假如增加10000个连接,那就是10000个PGA要提供,内存很轻易吃爆掉。而共享连接方式优点在于连接数量固定,所以内存数量不会占用很多,不过在数据库初始化的时候,共享服务器就要初始化好,比如有100个共享服务器,由于共享连接模式下,UGA是分配在PGA中的,所以初始化的时候需要初始化比较多的内存,也就是那100个UGA的内存。另外共享服务器还有一个优点就是很多数据库高级连接特性都要求使用共享服务器,所以有时候为了使用这些特性迫不得已只好设定为共享服务器连接模式。共享服务器的最大的缺点还是在于数据仓库模式下运行的时候,假如有大量的请求需要长时间占用服务器,那么就会造成很多别的请求的挂起,导致整个服务器性能的降低。另外,在有些应用服务器提供了连接池的时候,比如J2EE中经常有应用服务器的连接池,比如Weblogic的啊,还有开源的DBCP以及C3P0等等。在有这些连接池的时候,共享服务器对于性能上反而造成了累赘。另外,有时候在使用共享服务器的时候,由于数据事务处理不及时,而占住服务器的进程试图锁定前面事务没有处理的数据,会造成数据库的死锁,非凡是假如没有设定连接锁定超时的话,只能通过DBA上数据库杀进程的方式来解决了。不过也有这种的最佳方案,那就是混合模式,也就是对于同一个数据库服务器,既有专用服务器,也有共享服务器,共享服务器用来处理那种事务性很强的活。而专用服务器用来对付那些比较耗时间和资源的请求。当然,也要看到时候的实际情况如何再做决定,两者没有绝对的哪种好哪种不好的差别。