oracle的服务器进程分为:专用(DEDICATED)服务器进程和共享(SHARED)服务器进程
select server from v$session;
专用服务器:一个客户端连接对应一个服务器进程
共享服务器:多个客户端连接对应一个服务器进程,服务器端存在一个进程调度器来管理。
一、专用服务器进程
数据库服务器要求每个用户拥有一个专用服务器进程,当用户比较多的时候,则其对服务器的硬件资源,特别是内存,会产生比较大的压力。
适用环境:
1、 只有少数客户端。
2、 为数据仓库搭建的数据库系统。
3、 联机事务处理系统。(大事务的处理,若使用共享服务器模式,很有可能会造成有些事务需要进入队列排队,响应时间拉长)
二、共享服务器进程
多个用户程序可以并发共用一个服务器进程,客户端程序通过调用调度程序与服务器进程相连
如何查看是否是共享服务器模式?
1 查看调度程序
SQL> show parameter dispatchers;
NAME TYPE VALUE
------------------------------------ ----------- -----------------------------
dispatchers string (PROTOCOL=TCP) (SERVICE=sdecp
yXDB)
max_dispatchers integer 5
mts_dispatchers string (PROTOCOL=TCP) (SERVICE=sdecp
yXDB)
mts_max_dispatchers integer 5
2、查看共享服务器进程数
SQL> show parameter shared_servers;
NAME TYPE VALUE
------------------------------------ ----------- -----------------------------
max_shared_servers integer 20
shared_servers integer 1
3、预留
SQL> show parameter shared_server_session;
NAME TYPE VALUE
------------------------------------ ----------- ---------
shared_server_sessions integer 165
其中
dispatchers:调度程序服务器进程
max_shared_servers :指定同时运行的最大服务器进程数
shared_servers :启动实例时可以创建的服务器进程数
shared_server_sessions:指定用于用户会话的总数,配置此参数可为专用服务器保留用户会话
4.改变进程数
SQL> alter system set shared_servers=2;
系统已更改。
SQL>alter system set max_shared_servers=20;
系统已更改。
SQL> show parameter shared_servers;
NAME TYPE VALUE
------------------------------------ ----------- -------------------------
max_shared_servers integer 20
shared_servers integer 2
SQL>
优点是客户端进程多对一,增加了数据库可以支持的用户数。缺点就是各个用户共享一个进程,对用户访问数据库的性能有所影响。
共享服务器具有以下一些缺点:
1)共享服务器的代码路径比专用服务器长,所以它天生就比专用服务器慢。
2)存在人为死锁的可能,因为它是串行的,只要一个连接阻塞,则该服务器进程上的所有用户都被阻塞,并且极可能死锁。
3)存在独占事务的可能,因为如果一个会话的事务运行时间过长,它独占共享资源,其它用户只能等待,而专用服务器,每个客户端是一个会话。
4)共享服务器模式限制了某些数据库特性,例如:不能单独启动和关闭实例,不能进行介质恢复,不能使用Log Miner,并且SQL_TRACE没有意义(因为是共享而不是当前会话的)。
NAME TYPE VALUE
-------------------------------------------------- ----------- ----------------------------------------------------------------------------------------------------
hi_shared_memory_address integer 0
max_shared_servers integer 20
shared_memory_address integer 0
shared_pool_reserved_size big integer 6081740
shared_pool_size big integer 0
shared_server_sessions integer
shared_servers integer 2
把服务器从共享服务器模式改为专用服务器模式
alter system set shared_servers = 0 scope = both;--已经存在的共享进程需要等到会话结束才能结束
或
alter system set max_share_servers=0 scope=both;--立即强制结束所有共享服务器进程
ORACLE用户文档
In DedicatedServer Mode, there is a dedicated server process for each user process.
Select this option whenthe number of total clients is expected to be small, or when
database clients willmake persistent, long-running requests to the database.
In Shared Server Mode,several client connections share a database-allocated pool of
resources. Use this modewhen a large number of users need to connect to the
database. It is alsouseful when database memory is limited and for better
performance, since youcan have more client connections to the database than in
dedicated server modewith the same memory. If you choose shared server mode, you
must also indicate thenumber of server processes you want to create when an instance
is started up. For moreinformation about setting this parameter, click Help.