分类: Oracle
2010-09-02 15:26:31
Configuring Oracle Database for Shared Server
作者: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
假设一个应用程序访问Oracle的每个Session需要400KB的内存,每个服务进程的内存需要4MB,所分配的共享服务进程数为100个。现在有5000个客户连接,
则在Dedicated模式下:
内存=5000 * (400KB+4MB) = 22GB
Shared模式下:
内存=5000 * 400KB + 100 * 4MB = 2.5GB
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参数用于配置共享模式架构中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)"
指定端口的例子
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
关闭dispather
SELECT 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 = '';
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. |
配置二个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连接)两个用户登录数据库,在闲置状态下查看当前会话:
SQL> select schemaname, server, program from v$session;
SCHEMANAME SERVER PROGRAM
------------------------------ ---------------------
test1 DEDICATED sqlplus.exe
test2 NONE sqlplus.exe 注意此处的NONE
让用户test2的会话处于active状态,如让test2用户执行:
SQL> begin
2 for i in 1..500000 loop
3 dbms_lock.sleep(1);
4 end loop;
5 commit;
6 end;
7 /
查看session
SQL> select schemaname, server, program from v$session;
SCHEMANAME SERVER PROGRAM
------------------------------ ---------------------
test1 DEDICATED sqlplus.exe
test2 SHARED sqlplus.exe
可以看到test2当前是由Shared Server Process服务。
作者:George.ma blog:http://blog.chinaunix.net/u/12521/
chinaunix网友2010-09-05 15:11:38
Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com