oracle共享服务模式以及配置
一、共享服务器模式工作机制:
共享服务器模式(SHARED SERVER,也叫MTS Multi-Threaded Server):
数据库启动之后比专用服务器模式会多出两种进程,一种是调度进程(dispatcher),一种是共享服务器进程。来自客户端的请求会被dispatcher接受,然后dispatcher将请求置入Request队列。空闲的Server Process会按照request队列开始处理队列中的请求。处理过后的结果放入Response队列中。最后再由DIspatcher来将最后的结果返回给客户端。
在共享服务器模式下,客户端通过监听连接到dispatcher之后,dispatcher会随机分配一个端口,此时客户端断开和监听的连接,通过分配的端口和dispatcher连接。和监听的连接是短暂的。
相比于专用服务器模式,Server Process的UGA在SGA中,而专用服务器模式的UGA在PGA当中,共享服务器模式下如果设置了large_pool_size则用户的UGA会在large_pool中。MTS减少的内存实际上是专用服务器模式下每个用户连接到操作系统进程所需的内存,共享服务器模式由于限制了Server Process的数量,减少了建立Server Process所需要的内存,同时当并发量大时不需要频繁的创建和删除进程,减少了与之对应的开销,提升了并发量。所以共享服务器模式适合于高并发,处理量小的业务系统。
但相比于专用服务器模式,共享服务器模式也存在很大的问题:
1)共享服务器的代码路径比专用服务器长,所以它天生就比专用服务器慢。
2)存在人为死锁的可能,因为它是串行的,只要一个连接阻塞,则该服务器进程上的所有用户都被阻塞,并且极可能死锁。
3)存在独占事务的可能,因为如果一个会话的事务运行时间过长,它独占共享资源,其它用户只能等待,而专用服务器,每个客户端是一个会话。
4)共享服务器模式限制了某些数据库特性,例如:不能单独启动和关闭实例,不能进行介质恢复,不能使用Log Miner,并且SQL_TRACE没有意义(因为是共享而不是当前会话的)。
由于共享服务器模式存在种种问题,同时中间件也完全可以实现连接池的效果,所以一般情况下不会共享服务器模式,使用专用服务器模式即可。
共享服务器模式配置
配置共享服务器模式需要配置以下参数:
dispatchers:(必须配置的)为指定的协议指定调度进程的初始数量。
shared_servers:初始启动几个共享服务器进程
max_shared_servers:最多启动多少个共享服务器进程
max_dispatchers:调度进程的最大数量
shared_server_sessions:共享服务器模式最多可以有多少个session,如果共享服务器模式连接数超过此设置则会使用专用服务器模式,注意此值大小要小于数据库中sessions的设置。如果此值不设置则会所有session都为共享服务器模式、
circuits:共享服务器模式下oracle采用了virtual circuits来记录了哪个请求来自于哪个客户端,以保证请求处理完后能返回正确的客户端。circuits的设置限制了请求队列和响应队列中可用回路的总数量。共享服务器模式下只有一个请求队列,但每个dispatcher有自己的响应队列。
large_pool_size:由于在UGA在large_pool中,所以large_pool的合适大小有助于提升系统的性能,能放下所有共享服务器进程的UGA就好。
以下是具体操作过程:
[email protected]>show parameter processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 0
db_writer_processes integer 1
gcs_server_processes integer 0
job_queue_processes integer 10
log_archive_max_processes integer 2
processes integer 300
[email protected]>show parameter sessions
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
java_max_sessionspace_size integer 0
java_soft_sessionspace_limit integer 0
license_max_sessions integer 0
license_sessions_warning integer 0
logmnr_max_persistent_sessions integer 1
sessions integer 335
shared_server_sessions integer
[email protected]>show parameter dispatcher
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dispatchers string (PROTOCOL=TCP) (SERVICE=ORCLXD
B)
max_dispatchers integer
[email protected]>alter system set dispatchers='(PROTOCOL=TCP)(DISPATCHERS=2)(PROTOCOL=IPC)(DISPATCHERS=1)';
——在这里为TCP协议配置了两个调度进程,IPC协议配置了1个调度进程。
System altered.
[email protected]>alter system set max_dispatchers=10;
——最多启动10个调度程序
System altered.
[email protected]>show parameter shared_server
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer
shared_server_sessions integer
shared_servers integer 1
[email protected]>alter system set shared_servers=10;
System altered.
[email protected]>alter system set max_shared_servers=20;
System altered.
[email protected]>alter system set shared_server_sessions=100;
System altered.
以上转自云栖社区:
https://yq.aliyun.com/wenji/76864
感谢原UP