当会话通过客户端毗连到Oracle数据库时,根据服务器处理请求方式的不同,可以有两种毗连模式,一种称为专用服务器毗连(Dedicated Server),另外一种称为共享服务器毗连(Shared Server)。
一、专用/共享服务器毗连
当用户通过会话毗连到数据库时,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参数中也有):
至此,我们就完成了共享服务器的所有设置,毗连时只需要指定对应的毗连名,就会以共享服务器模式毗连数据库。
三、相关视图
完成共享服务器毗连模式设置后,你可以通过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也不会立即关闭所有的共享服务器进程,而是会等到所有以共享模式毗连的客户会话断开,再渐渐关闭共享服务器举行。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |