Chinaunix首页 | 论坛 | 博客
  • 博客访问: 791351
  • 博文数量: 185
  • 博客积分: 7434
  • 博客等级: 少将
  • 技术积分: 2325
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-29 14:01
文章分类

全部博文(185)

文章存档

2013年(1)

2012年(2)

2011年(17)

2010年(25)

2009年(36)

2008年(104)

分类: Oracle

2010-09-02 15:26:31

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/

SharedDedicated的内存比较

假设一个应用程序访问Oracle的每个Session需要400KB的内存,每个服务进程的内存需要4MB,所分配的共享服务进程数为100个。现在有5000个客户连接,

 

则在Dedicated模式下:

 

  内存=5000 * (400KB+4MB) = 22GB

Shared模式下:

 

  内存=5000 * 400KB + 100 * 4MB = 2.5GB

 

配置Dedicated Server

Oracle默认的Server ProcessDedicated,因此无需特殊配置,只要在Client的连接方式上声明ServerDEDICATED。比如Oracle Clienttnsname.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类似方式

具体配置举例:

5TCP/IP协议dispathers3SSL TCP/IP协议dispathers

DISPATCHERS=’(PORT=tcp)(DISP=5)’,’(PORT=tcps)(DISP=3)’

 

简单的dispatchers参数设置

DISPATCHERS="(PROTOCOL=TCP)(DISPATCHERS=2)"

 

指定IPdispatchers参数设置

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协议的dispatcher2->3SSL tcp/ipdispathcer2->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 = '';

 作者: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连接的服务模式

配置二个tnsnametest_ddedicated方式,test_sshared方式

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;

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/

 

阅读(2131) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-05 15:11:38

Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com

chinaunix网友2010-09-02 15:27:31

这个图怎么发不上来?大家从oracle的联机文档中也能找到这个原理图