Oracle 10g 共享服务器.docx
《Oracle 10g 共享服务器.docx》由会员分享,可在线阅读,更多相关《Oracle 10g 共享服务器.docx(16页珍藏版)》请在冰豆网上搜索。
Oracle10g共享服务器
Oracle10g共享服务器
Oracle数据库创建服务器进程以处理用户进程连接到数据库实例的请求,服务器进程可以是以下两种形式之一:
Dedicatedserverprocess -- 共服务一个用户的进程
SharedServerprocess -- 可以服务多个用户
直接连接进程
图4-1展示直接连接如何工作,这个情景下,两个用户进程通过直接连接进程连接到数据库。
通常使用SharedServer并通过Dispatcher连接到数据库会更好,一个SharedServer可以更高效因为它处理多个请求却使用更少的资源。
图4-2展示SharedServer如何工作。
在以下的情况,用户和管理员应该明确使用DedicatedServer连接
∙提交一个批处理作业
∙使用RecoveryManager来备、还原或恢复一个数据库
配置DedicatedServer
如要在一个配置为SharedServer的数据库中使用DedicatedServer,用户必需使用一个配置为DedicatedServer的netservicename。
具体地说,以下参数必需包含在连接描述中SERVER=DEDICATED
Figure4-1OracleDatabaseDedicatedServerProcesses
Figure4-2OracleDatabaseSharedServerProcesses
OracleShareServer
形象比喻
OracleSharedServer工作方式就像许多餐馆一样,一个服务员会服务多个餐桌。
如果多数餐桌点菜量都很小,则餐馆只需要很少服务员即可满足需要,并且客户不会觉得自己等待太久,这就是共享服务器的优点。
但是如果忽然两个餐桌来了很多客人,服务员会被这两个餐桌的工作淹没,其它餐桌就有可能无法因此获得及时响应,这就是共享服务器的缺点,也是它不适应的地方。
优点:
1.通常情况下,OracleSharedServer能让读者在不需要增加硬件的情况下支持相同或更大数量的连接
2.ConnectionPooling特性能使数据库服务器断开一个空闲的OracleSharedServer连接来服务一个输入请求
3.OracleShareServer是使用诸如OracleConnectionManager等选件所必需的基础
缺点:
1.生成大量网络通信信息或产生大型结果集合的应用软件不适合OracleShareServer
2.使用一个OracleShareServer连接时,有些功能会被禁止。
如不能启动、关闭或执行Oracle服务器的某些类型的恢复
不应使用它执行某些管理任务。
如批量装入、索引与表的重建以及表分析。
OracleSharedServer基础结构解析
使用Oracle SharedServer时的PGA与SGA的变化
1.使用专用服务器时PGA包括:
游标状态、用户会话数据和栈空间三部份内存。
而OracleSharedServer中PGA只有栈空间。
2.专用服务器SGA包括SharedPool,数据库高速缓存和重做日志缓冲器。
而OracleSharedServer的SGA包括SharedPool、数据库高速缓存、数据库缓冲器、大型池(由纵多"用户全局区“组成)、一个请求队列和多个调度程序响应队列组成。
3.调度程序所维护的每个连接均被分配一个共享内存段,并形成虚拟电路(virtualcircuit),调度程序使用它来管理客户与Oracle数据库之间的通信。
客户连接 Oracle SharedServer 的工作流程
1.客户在解析了服务器名称之后联系Oracle数据库
2.Oracle后台进程PMON(进程监视器)实时通知监听器调度程序(Dispatcher)正维护那些虚拟电路。
由此,监听器知道该调度程序(Dispatcher)正管理着的连接数量,这个信息使得监听器能够利用调度程序负荷平衡特性
3.监听器确认客户供给的OracleServiceName,然后找到连接数最小(或负荷最小)的调度程序,并把客户连接请求传递或重定向到最小负荷调度程序(Dispatcher)。
4.监听器把调度程序信息发回客户,以便客户能够把连接重定向到合适的调度程序进程。
5.PMON把连接信息注册给所有监听器,所有监听即可知道刚才的调度程序(Dispatcher)已经增加了一个连接
6.Dispatcher把用户请求放到全局共用的请求队列
7.SharedServerProcess执行每个请求,并把已完成的请求放到Dispatcher的响应队列中
8.Dispatcher把已完成请求返回给客户
9.当一个客户连接终止时,PMON再次通监听器,以反映调度程序正在处理的连接数的变化。
配置OracleSharedServer
共享内存资源已经被默认配置,所以读者不必要配置,但如果如果有更适合生产环境的配置,它也可以被更改。
我们可以使用ALTERSYSTEM修改DISPATCHERS或SHARED SERVER。
∙启用OracheSharedServer
∙OracleSharedServer的初始化参数
∙配置Dispatchers
∙监视SharedServer
启用和关闭OracleSharedServer
一旦配置SHARED_SERVERS参数被配置成大于0,数据库即转换成OracleSharedServer状态,这种情况Dispatcher默认为1
如果SHARED_SERVERS参数被清除,数据库即从OracleSharedServer转换成专用服务器。
为了向后兼容,如果启动时Shared_servers没有指定,而Dispatcher被指定大于0的值,Shared_server即被启用,默认值为1
如何确定数据库正处于专用服务器状态或是OracleSharedServer状态
在LSNRCTL中执行SERVICE指令,如果正处于专用服务器状态,结果应该像下面
LSNRCTL>service
正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
服务摘要..
服务"PLSExtProc"包含1个例程。
例程"PLSExtProc",状态UNKNOWN,包含此服务的1个处理程序...
处理程序:
"DEDICATED"已建立:
0已被拒绝:
0
LOCALSERVER
服务"orcl"包含1个例程。
例程"orcl",状态READY,包含此服务的1个处理程序...
处理程序:
"DEDICATED"已建立:
50已拒绝:
0状态:
ready
LOCALSERVER
服务"orclXDB"包含1个例程。
例程"orcl",状态READY,包含此服务的1个处理程序...
处理程序:
"D000"已建立:
0已被拒绝:
0当前:
0最大:
1002状态:
ready
DISPATCHERNETPLUS,pid:
1324>
(ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1126))
服务"orcl_XPT"包含1个例程。
例程"orcl",状态READY,包含此服务的1个处理程序...
处理程序:
"DEDICATED"已建立:
50已拒绝:
0状态:
ready
LOCALSERVER
命令执行成功
________________________________________
如果正处于OracleSharedServer状态,SERVICE指令的结果应该像下面
________________________________________
LSNRCTL>service
正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
服务摘要..
服务"PLSExtProc"包含1个例程。
例程"PLSExtProc",状态UNKNOWN,包含此服务的1个处理程序...
处理程序:
"DEDICATED"已建立:
0已被拒绝:
0
LOCALSERVER
服务"orcl"包含1个例程。
例程"orcl",状态READY,包含此服务的6个处理程序...
处理程序:
"DEDICATED"已建立:
121已拒绝:
0状态:
ready
LOCALSERVER
"D001"已建立:
0已被拒绝:
0当前:
0最大:
1002状态:
ready 从D000至D001共有5个Dispatcher
DISPATCHERNETPLUS,pid:
3580>
(ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1758))
"D000"已建立:
0已被拒绝:
0当前:
0最大:
1002状态:
ready
DISPATCHERNETPLUS,pid:
1996>
(ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1757))
"D002"已建立:
0已被拒绝:
0当前:
0最大:
1002状态:
ready
DISPATCHERNETPLUS,pid:
320>
(ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1759))
"D003"已建立:
0已被拒绝:
0当前:
0最大:
1002状态:
ready
DISPATCHERNETPLUS,pid:
1964>
(ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1760))
"D004"已建立:
1已被拒绝:
0当前:
1最大:
1002状态:
ready
DISPATCHERNETPLUS,pid:
876>
(ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1761))
服务"orclXDB"包含1个例程。
例程"orcl",状态READY,包含此服务的0个处理程序...
服务"orcl_XPT"包含1个例程。
例程"orcl",状态READY,包含此服务的6个处理程序...
处理程序:
"DEDICATED"已建立:
121已拒绝:
0状态:
ready
LOCALSERVER
"D001"已建立:
0已被拒绝:
0当前:
0最大:
1002状态:
ready
DISPATCHERNETPLUS,pid:
3580>
(ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1758))
"D000"已建立:
0已被拒绝:
0当前:
0最大:
1002状态:
ready
DISPATCHERNETPLUS,pid:
1996>
(ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1757))
"D002"已建立:
0已被拒绝:
0当前:
0最大:
1002状态:
ready
DISPATCHERNETPLUS,pid:
320>
(ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1759))
"D003"已建立:
0已被拒绝:
0当前:
0最大:
1002状态:
ready
DISPATCHERNETPLUS,pid:
1964>
(ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1760))
"D004"已建立:
1已被拒绝:
0当前:
1最大:
1002状态:
ready
DISPATCHERNETPLUS,pid:
876>
(ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1761))
命令执行成功
OracleSharedServer的初始化参数
以下初始化参数控制SharedServer,它们都可以通过ALTERSYSTEM动态修改
∙SHARED_SERVERS:
指定实例启动时Shared_servers启动的最小值,这是SharedServer唯一必需的参数
o例:
ALTERSYSTEMSETSHARED_SERVERS=5
∙MAX_SHARED_SERVERS:
指定可以并发运行的最大数量SHAREDSERVER
∙SHARED_SERVER_SESSIONS:
指定共享服务器可以接受的最大会话数量,即使到了这个会话数量,专用连接也是可以进入的。
∙DISPATCHERS:
配置SHARED SERVER结构的DISPATCHERS数量
∙MAX_DISPATCHERS:
指定可并发运行的最大数量DISPATCHER。
这个参数现在可以被忽略,因为它只在以后的版本中,DISPATCHERS会根据连接数动态调节,的情况下有用。
∙CIRCUITS:
为入站或出站网络会话指定总的虚拟电路数量。
一般它不应被手动修改。
决定Shared_servers的值
Shared_Servers参数指定数据库实例启动时至少启动的SHARED_SERVERS数量,实例启动后数据库可根据服务器的繁忙程度和请求队列的长度来启动更多的SHARED_SERVER
PMON不能把Shared_Server的数量减少到Shared_Servers的值以下,所以能使用该参数保证Shared_Servers的数量.
如果每个连接都有较少量的处理,每25个连接配置一个共享服务器应该是足够的。
如果用户需要较大的结果集或密集型的处理,则应该减少平均每服务器处理的连接数
限制SharedServer的数量
参数MAX_SHARED_SERVERS参数指定可由PMON启动的最大Shared_Servers数量。
它没有默认值,如果未被指定,PMON将根据需要启动。
SHARED_SERVERS的值覆盖MAX_SHARED_SERVER的值,因为你可以通过为SHARED_SERVERS指定较大的值,以此强制PMON启动超出MAX_SHARED_SERVER限制的进程数。
限制SHARED SERVER的进程数的主要原因是保留服务器资源,例如:
∙在备份的时候备份作业获取更大的资源
∙业务繁忙时防止过多的Shared_servers使得服务器当机
∙另一个原因是服务器调试和性能分析。
例如慢慢增加Max_Shared_Servers直至用户不感觉到服务的延时。
限制SHARED SERVER的会话数量
SHARED_SERVER_SESSION参数限制SHARED_SERVER是的最大并发用户会话数,以此为直接连接保留会话数,以此确保使用直接连接执行管理任务时不会被Sharedserver占用完所有会话数。
它没有默认值,如果未被指定,系统将按需要启动,它受初始化参数SESSIONS限制
保护共享内存
CIRCUITS参数设置可以在共享内存中被启动的虚拟电路数量。
它没有默认值,如果未被指定,系统将按需要启动,它受限于Dispatcher参数和系统资源。
配置Dispatcher
如果启动SHARED SERVER,而DISPATCHER又未被指定,数据库会至少启动一个Dispatcher,在这种情况下DISPATCHER配置如下:
dispatchers="(protocol=tcp)"
DISPATCHERS初始化参数
网络协议地址通过一个或多个以下属性指定
Attribute
Description
ADDRESS
指定Dispatchers监听的网络协议地址
DESCRIPTION
指定Dispatchers监听的网络协议地址的描述。
PROTOCOL
指定Dispatchers监听的网络协议
以下属性指定启动多少个Dispatcher,默认为1
Attribute
Description
DISPATCHERS
指定初始启动的Dispatcher数量
以下属性告诉实例每个Dispatcher的网络属性。
它们都是可选的。
Attribute
Description
CONNECTIONS
指定每个Dispatcher可启动的最大连接数Specifythemaximumnumberofnetworkconnectionstoallowforeachdispatcher.
SESSIONS
指定每个Dispatcher可启动的最大会话数
TICKS
SpecifythedurationofaTICKinseconds.ATICKisaunitoftimeintermsofwhichtheconnectionpooltimeoutcanbespecified.Usedforconnectionpooling.
LISTENER
PMON把连接信息发送到的那个监听器的地址。
这个属性公在监听器为非本地监听器,使用一个不同于1521的监听端口,默认端口呼LOCAL_LISTENER参数还未得到指定,或监听器正在驻留在一个不同的网络节点上时才需要被设置。
MULTIPLEX
UsedtoenabletheOracleConnectionManagersessionmultiplexingfeature.
POOL
用来启用连接池特性
SERVICE
Dispatcher将向监听器中指定的Service列表注册。
你可以使用3个或更长的首字母作为参数的缩写。
Forexample,youcanspecifySESSIONS=3,SES=3,SESS=3,orSESSI=3,andsoforth.
决定Dispatchers的数量
一旦你知道操作系统上每个进程支持的最大连接数,可通过以下公式计算
Dispatchers数量=最大并发会话数/每个Dispatcher的每个连接数
假设系统支持每个进程970个连接,并且
最大并发TCP会话数为4000
最大并发SLL TCP会话数为2500
则根据(4000/9700) 和 (2500/970),Dispatcher应该这样配置
Dispatchers="(PROT=TCP)(DISP=5)(PROT=TCPS)(DISP=3)"
设置初始的Dispatchers数量
例:
这是一个典型例子
Dispatchers="(PROT=TCP)(DISP=2)"
例:
强制使用Dispatcher的地址
Dispatchers="(Address=(Protocol=tcp)(host=144.25.16.201))(dispatchers=2)"
例:
强制使用Dispatcher的端口
Dispatchers="(Address=(Protocol=tcp)(Port=5000))"
Dispatchers="(Address=(Protocol=tcp)(Port=5001))"
修改Dispatchers的数量
根Shared_Servers不同,Dispatcher不会自动改变。
你可以通过ALTERSYSTEM改变Dispatcher的数量。
并且可以启动多于Max_Dispatchers数量的Dispatchers,因为Max_Dispatcher在将来的版本可能有用,但本版本中并不工作。
监视以下视图得知Dispatcher进程的负载
V$QUEUE -- 显示Dispatcher的请求和响应队列
V$DISPATCHER -- 显示各个Dispatcher的详细信息
V$DISPATCHER_RATE -- 显示Dispatcher的统计数据
这个视图可得知Dispatcher进程的负载,如果负载太高,则需要增加Dispatcher,反之减少。
当减少Dispatcher时,它不会马上减少,而且等用户断开连接后再减少。
当你改变Discription,address,protocol,connections,ticks,multiplex和POOL属性时,改变不会对现有Dispatchers生效,而只会对新Dispatcher生效。
所以要想对所有Dispatcher生效,必需杀掉现有Dispatcher,让系统重新启动新Dispatcher.
关闭指定Dispatcher
为找到特定Dispatcher,可查询动态性能视图
SelectName,NetworkfromV$DISPATCHER;
结果中,Dispatcher会以"Dnnn"的形式展示,所以关闭D001Dispatcher可用以下命令
ALTERSYSTEMSHUTDOWNIMMEDIATE'D001';
监视SharedServer
以下视图对于获取你的SharedServer配置和性能监视非常有用
View
Description
V$DISPATCHER
提供DISPATCHER信息,包括名称,网络地址,状态,varioususagestatistics,andindexnumber.
V$DISPATCHER_CONFIG
提供关于DISPATCHER的配置信息
V$DISPATCHER_RATE
提供DISPATCHER的统计信息
V$QUEUE
包含SharedServers信息队列的信息
V$SHARED_SERVER
包含SharedServers的信息
V$CIRCUIT
包含虚拟电路的信息,一种用户通过Dispatcher和Servers连接到数据库的东东。
V$SHARED_SERVER_MONITOR
包含调试SharedServer的信息
V$SGA
包含systemglobalarea(SGA)的信息。
可能会对于调试SharedServer非常有用。
V$SGASTAT
包含SGA的详细统计信息。
V$SHARED_POOL_RESERVED
列出统计信息以帮助调节保留池和共享池
调节共享服务器选项
调节共享服务器选项应该考虑到的地方
1.确保有足够的Dispatcher,以便客户没有正在等候Dispatcher响应它们的请求
2.确保有足够的SharedServerProcess,以便没有请求正在等候得到处理
配置LargePoolSGA,以便有足够大的地方存储UGA。