当会话通过客户端连接到Oracle数据库时,根据服务器处理请求方式的不同,可以有两种连接模式,一种称为专用服务器连接(Dedicated Server),另外一种称为共享服务器连接(Shared Server)。
文章目录
- 一、专用/共享服务器连接
- 1.1 专用服务器连接
- 1.2 共享服务器连接
- 二、配置共享服务器连接
- 2.1 共享服务器连接参数
- 2.2 数据库开启共享服务器
- 2.3 客户端配置共享服务连接
- 三、相关视图
一、专用/共享服务器连接
当用户通过会话连接到数据库时,Oracle必须创建相应的进程来对接并服务会话的请求,创建的进程类型可以分为下面两类:
- 专用服务器进程(Dedicated Server Process),每个进程服务单一用户进程。
- 共享服务器进程(Shared Server Process),每个进程服务多个用户进程。
1.1 专用服务器连接
Oracle的默认连接模式是专用服务器连接。
专用服务器连接模式下,每个连接到数据库的用户进程都会创建一个专用服务器进程来对接并处理请求。但是每个专用服务器进程都意味着资源开销。如果连接数较多,且用户进程大部分时间都会处于空闲状态,那么维护大量的专用服务器进程就会出现资源浪费,甚至挤爆内存。
1.2 共享服务器连接
如果有大量的用户连接,共享服务器连接通常是更好的选择,这个模式下的优点是一个服务器进程可以处理多个用户的请求,它可以将服务器进程数量控制在一个较低的数量,更高效的利用资源,并且降低需要维护的进程数。
共享服务器连接需要额外配置,即使配置后,专用服务器进程也是生效的(某些程序只能通过专用服务器模式连接,比如RMAN)。
共享服务器连接模式下,用户进程对接的是调度程序,调度程序将用户请求放入请求队列(每个用户通过virtual circuit标识)。共享服务器会依次处理请求队列的内容,并将处理结果放入响应队列,最后由调度程序取出结果并返回给用户进程(下图所示):
二、配置共享服务器连接
2.1 共享服务器连接参数
共享服务器默认是关闭状态,需要通过相关参数配置打开,主要参数如下:
- shared_servers 共享服务器进程数量,即Oracle实例启动时及平时维护的最低共享服务器进程数据量,也是唯一的必须参数。
- max_shared_servers 共享服务器进程的最大数量。
- shared_server_sessions 使用共享服务器进程的最大用户会话数量。
- dispatchers 调度程序配置,会默认启动。
2.2 数据库开启共享服务器
开启共享服务器连接的方式非常简单,只需要将参数shared_servers设置为大于0的值(最小共享服务器进程数量)。根据服务器的负载,Oracle会动态的调整共享服务器进程数量,但不会超过max_shared_servers设定的上限。
通常情况下,共享服务器进行和用户会话数量可以按照1:10的比例配置,根据会话的活跃程度可以适当的调整。例如,用户会话非常繁忙,那么就可以按照1:5配置,或用户会话非常闲,可以按照1:15配置,没有固定要求。
开启共享服务器进程:
alter system set shared_servsers=5 scope=both;
alter system set max_shared_servsers=20 scope=both;
只有shared_servers是必需参数,max_shared_servers是选配参数,如果未指定,则不设上限,直到达到processes参数的限制。
由于共享服务器进程需要通过dispatchers进程来进行任务调度,即使不配置,Oracle也会启动一个dispatchers进程,可以通过dispatchers参数查看:
select value from v$parameter where name='dispatchers';
- (PROTOCOL=TCP)代表TCP协议连接
- (SERVICE=prodXDB)表示采用共享服务器连接的服务名(后面配置客户端连接时会指定服务名)
2.3 客户端配置共享服务连接
目前只是完成了数据库服务器端的连接配置,客户端在连接时也需要指定共享服务器模式。即使数据库配置了共享服务器连接模式,专用服务器连接模式也是生效的,客户端可以任意选择2种连接模式,只需要在连接名中指定(server=dedicated)或(server=shared)。
编辑客户端的tnsnames.ora文件,这里复制上面连接,重命名为shared_con连接(名称任意),最主要的是将(SERVER=DEDICATED)修改为(SERVER=SHARED),指定改连接名采用共享服务器连接:
上面的服务名可以在数据库服务器通过lsnrctl services命令查看,找到共享服务器的服务名(上面dispatchers参数中也有):
lsnrctl services
至此,我们就完成了共享服务器的所有配置,连接时只需要指定对应的连接名,就会以共享服务器模式连接数据库。
sqlplus hr/hr@shared_con
三、相关视图
完成共享服务器连接模式配置后,你可以通过v$shared_server, v$dispatcher, v$queue等视图来查看共享服务器连接的相关信息
v$shared_server提供了共享服务器进程的相关信息,由于我们设置shared_servers=5,所以这里有5个进程:
select * from v$shared_server;
v$dispatcher显示的是调度程序信息,这里是设置shared_servers参数时,Oracle自动启动的调度程序,名称是D000:
select * from v$dispatcher;
v$session中的server字段可以判断会话的连接模式,DEDICATED表示共享服务器连接模式,SHARED或NONE表示共享服务器连接模式(NONE表示当前共享服务器进程没有任务处理,处于空闲状态):
select sid,username,server from v$session where username is not null;
以上即是Oracle共享服务器连接模式的基本配置,如果要关闭共享服务器模式,只需要将shared_servers参数设置为0即可。即使shared_servers被设置为0,Oracle也不会立刻关闭所有的共享服务器进程,而是会等到所有以共享模式连接的客户会话断开,再逐渐关闭共享服务器进行。