Configuring Oracle Database for Shared Server
专用模式(Dedicated)和共享(Shared)模式说明
作者:George.ma blog:http://blog.chinaunix.net/u/12521/
dedicated模式,一个客户端请求,数据库就会对应起一个进程进行处理,一对一服务
Shared模式,一个后台数据库进程服务多个客户端请求,一对多服务
打个比方,dedicated就打你坐出租车,就为你一个服务,Shared就是公交车,同时为很多人服务
专用模式原理图:
共享模式原理图:
1.转发器Dispatcher接受到用户端的请求
2.请求被置入Request队列,并建立了类似电路的一条回路Circurt用来标识请求是来自哪个Client。
3.某个闲置的Server Process开始处理队列中的请求
4.SGA内存分配
5.将处理的结果置入Response队列
6.结果从Response Queue返回给Dispatcher
7.Dispatcher将结果最终返回给当初的Client
作者:George.ma blog:http://blog.chinaunix.net/u/12521/
Shared与Dedicated的内存比较
假设一个应用程序访问Oracle的每个Session需要400KB的内存,每个服务进程的内存需要4MB,所分配的共享服务进程数为100个。现在有5000个客户连接,
则在Dedicated模式下:
内存=5000 * (400KB+4MB) = 22GB
Shared模式下:
内存=5000 * 400KB + 100 * 4MB = 2.5GB
配置Dedicated Server
Oracle默认的Server Process是Dedicated,因此无需特殊配置,只要在Client的连接方式上声明Server为DEDICATED。比如Oracle Client的tnsname.ora文件声明如下:
如:
test =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.1)(PORT =1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test)
)
)
配置共享模式
共享模式可以在线通过alter system命令配置
有关共享模式的初始化参数说明
SHARED_SERVERS:指定数据库启动时和平时运行时最少的后台服务进程数量,只要指定这个参数大于0即表示启用了共享模式
MAX_SHARED_SERVER:指定最大的后台服务进程数量
SHARED_SERVER_SESSION:指定最大的以共享方式连接的session数,通过数据库总的session数配合,可以预留一定数量的专用模式连接数
DISPATCHERS:用于配置共享模式架构中dispatcher进程
MAX_DISPATHCERS:指定同时能运行的dispatcher进程数量,这个参数在10G还没有,是为了将来能根据客户端并发连接数自动调节dispatcher进程数量而设计的
CIRCUITS:指定虚拟环路数量
启用共享模式
当shared_servers初始化参加被设为大于0时就表过启用了共享模式,其它参数都不是必需的。因为共享模式只少需要一个dispatcher进程,因此如果没有配置dispatcher参数,系统将默认起一个dispatcher进程。
共享模式可能通过alter system设置SHARED_SERVERS为非0值动态启动。如果有初始化文件中没有设置SHARED_SERVERS或者设置为0,则共享模式不会在数据库启动时生效。
配置dispatchers
Dispatchers参数用于配置共享模式架构中dispatcher进程,共享模式只少需要一个dispatcher进程。如果你没有指定dispatcher参数,但又把SHARED_SERVER设为非0值启用了共享模式,这样数据库会缺省创建一个TCP协议的dispather,等同于设置为dispatchers="(PROTOCOL=tcp)"
如果你需要配置其它dispatcher,你可能通过指定以下属性:
ADDRESS
DESCRIPTION
PROTOCOL
还有以下附加属性可以指定:
DISPATHCERS
CONNECTIONS
SESSIONS
TICKS
LISTENER
MULTILEX
POOL
SERVICE
属性说明:
ADDRESS:指定dispathers监听的网络地址
DESCRIPTION Specify the network description of the endpoint on which the dispatchers listen, including the network protocol address. The syntax is as follows:
(DESCRIPTION=(ADDRESS=...))
PROTOCOL Specify the network protocol for which the dispatcher generates a listening endpoint. For example:
(PROTOCOL=tcp)
DISPATCHERS:指定dispathers数量
CONNECTIONS:第个dispatcher最大允许的最大连接数
TICKS:启用连接池时,连接空闲超时时间,以10分钟为单位,1表示10分钟,2表示20分钟
POOL:是否起用连接池
SERVICE:指定dispathers注册的service
以上属性名称关键字,你可以用3位或3位以上的缩写,如你需要指定sessions=3,你可以写成ses=3,sess=3或sessi=3类似方式
具体配置举例:
5个TCP/IP协议dispathers,3个SSL TCP/IP协议dispathers:
DISPATCHERS=’(PORT=tcp)(DISP=5)’,’(PORT=tcps)(DISP=3)’
简单的dispatchers参数设置
DISPATCHERS="(PROTOCOL=TCP)(DISPATCHERS=2)"
指定IP的dispatchers参数设置DISPATCHERS="(ADDRESS=(PROTOCOL=TCP)(HOST=144.25.16.201))(DISPATCHERS=2)"
作者:George.ma blog:http://blog.chinaunix.net/u/12521/
指定端口的例子DISPATCHERS="(ADDRESS=(PROTOCOL=TCP)(PORT=5000))"DISPATCHERS="(ADDRESS=(PROTOCOL=TCP)(PORT=5001))"
说明一下,dispatchers配置好后,就算监听不起,客户端也能通过dispatcher配置连接上数据库
修改dispatchers方法
这里介绍一下index的使用方法
举例说明:如果原来的配置为
DISPATCHERS='(PROT=tcp)(DISP=2)', '(PROT=tcps)(DISP=2)'
你想修改tcp/ip协议的dispatcher从2->3,SSL tcp/ip的dispathcer从2->1,语法为:
ALTER SYSTEM SET DISPATCHERS = '(INDEX=0)(DISP=3)', '(INDEX=1)(DISP=1)';
or
ALTER SYSTEM SET DISPATCHERS = '(PROT=tcp)(DISP=3)', '(PROT-tcps)(DISP=1)';
这里第一种方法的index=0表示修改第一个dispatcher设置,index=1表示第二个,由此可见index用来指定第几个dispatcher
关闭dispatherSELECT NAME, NETWORK FROM V$DISPATCHER;
从v$dispather视图找出唯一的名字,以Dnnn命名,如D002
然后用alter system shutdown immediate ‘D002’关闭这个dispather
其中immediate关键字可以省略,如果不指定immediate,等所有用户连接退出后才会被关闭
关闭共享模式
设置shared_servers参数为0即可,设置为0后,新的客户端就不能以共享模式连接数据库了,但以有的会话会被继续处理,直到连接关闭然后清空dispathers参数设置ALTER SYSTEM SET DISPATCHERS = '';
作者:George.ma blog:http://blog.chinaunix.net/u/12521/
监控共享模式
The following views are useful for obtaining information about your shared server configuration and for monitoring performance.
View
Description
V$DISPATCHER
Provides information on the dispatcher processes, including name, network address, status, various usage statistics, and index number.
V$DISPATCHER_CONFIG
Provides configuration information about the dispatchers.
V$DISPATCHER_RATE
Provides rate statistics for the dispatcher processes.
V$QUEUE
Contains information on the shared server message queues.
V$SHARED_SERVER
Contains information on the shared servers.
V$CIRCUIT
Contains information about virtual circuits, which are user connections to the database through dispatchers and servers.
V$SHARED_SERVER_MONITOR
Contains information for tuning shared server.
V$SGA
Contains size information about various system global area (SGA) groups. May be useful when tuning shared server.
V$SGASTAT
Contains detailed statistical information about the SGA, useful for tuning.
V$SHARED_POOL_RESERVED
Lists statistics to help tune the reserved pool and space within the shared pool.
检查当前Session连接的服务模式
配置二个tnsname,test_d以dedicated方式,test_s以shared方式
test_d=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test)
)
)
test_s =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = test)
)
)
分别以test1(用test_d连接)和test2(用test_s连接)两个用户登录数据库,在闲置状态下查看当前会话:
作者:George.ma blog:http://blog.chinaunix.net/u/12521/
SQL> select schemaname, server, program from v$session;
SCHEMANAMESERVERPROGRAM
------------------------------ ---------------------
test1DEDICATEDsqlplus.exe
test2NONEsqlplus.exe注意此处的NONE
让用户test2的会话处于active状态,如让test2用户执行:
SQL> begin
2for i in 1..500000 loop
3dbms_lock.sleep(1);
4end loop;
5commit;
6end;
7/
查看session
SQL> select schemaname, server, program from v$session;
SCHEMANAMESERVERPROGRAM
------------------------------ ---------------------
test1DEDICATEDsqlplus.exe
test2SHAREDsqlplus.exe
可以看到test2当前是由Shared Server Process服务。
作者:George.ma blog:http://blog.chinaunix.net/u/12521/