gdufo

 

Tuning the Oracle Shared Server

 

1Overview
Oracle shared server
主要用于允许多user进程能够共享有限数量的servers
dedicated server环境中,每个user 进程都会分配到一个server进程,但如果这些server进程不能完全被利用,常处于idle状态,就会造成内存和cpu的浪费。
当使用shared server模式,user进程是动态的被分配到可以被任何user进程共享的server进程上的。当dispatcher进程获得一个user 进程请求后会将其放入请求队列,以便server进程可以处理该请求并将结果返回给dispatcherresponse队列。随后 dispatcher进程会将response队列中的结果返回给user进程。
Oracle Shared Server
主要用于下面的情况:当dedicated Server的系统对于system开销相对较大;在访问的资源上存在限制。

2、对dispatchers的监控:
1
)可以通过v$MTS视图获得关于连接和session的会话以及当前使用的使用的数据信息。如果sessions的设置低于实际的dispatcher的设置,MAXIMUM_CONNECTIONS的默认值是参数SESSIONS的值。
2
V$DISPATCHER视图查询dispatcher的繁忙率:
select network “protocol”, status “status”, sum(owned) “clients”, sum(busy) * 100/(sum(busy)+sum(idle)) “busy rate” from v$dispatche group by network;
 note
:在选择dispatcher数量的时候,应该考虑客户端的数量对于dispatcher的繁忙比率。如果一个dispatcher的繁忙比率 超过50%,就需要考虑增加dispatcher的数量。如果发现部分dispatcher经常处于idle的状态,应该考虑减少dispatcher的 数量。
可用下面的SQL查看users sessions是否在等待dispatchers
select decode(sum(totalq), 0, ‘no responses’, sum(wait)/sum(totalq)) “average wait time” from v$queue q, v$dispatcher d where q.type = ‘DISPATCHER’ AND q.paddr = d.paddr;
如果观察到大量的等待比率并不断增长,需要考虑增加dispatcher的数量。
增加或减少dispatcher使用:
alter system set mts_dispatchers = ‘protocol, number’;
执行上述语句后只有新的连接建立才会使用new增加的dispatcher
2
)此外,可以使用视图V$DISPATCHER_RATE视图来分析冲突。它分组显示了curavgmax的统计信息。如果使用shared Server的性能不理想,则cur的值将接近max的值,对此应该考虑增加dispatcher的数量。如果发现shared Server性能良好,cur值远远低于max的值,可以考虑降低dispatcher的个数。

3、对Shared Server的监控:
PMON后台进程发现当前存在的shared Servers都处在忙碌状态,Oracle shared Server进程就会被是动态创建的创建。当然此时MAX_SHARED_SERVERS的值必须大于实际的servers值。当然,如果PMON检测到 当前有shared servers存在idle状态的,则会减少相应的shared servers的数量,直到数量达到SHARED_SERVERS的值。所以不必太多的考虑shared servers的状态。但是有时需要调整SHARED_SERVERSMAX_SHARED_SERVERS的参数的大小。
对此,可以使用视图V$SHARED_SERVER视图获得shared servers的当前信息。
select name, requests, busy*100/(busy+idle) “busy %”, status from v$shared_server where status != ’QUIT’;
此外,可以查看每个请求的平均等待时间:
select decode(totalq, 0, ‘No Requests’, wait/totalq ||’ hundredths of seconds’ )”Average Wait Time Per Requests” from v$queue where type = ‘COMMON’;

4、监控进程的作用:查看共享连接。如果觉得user程序有问题或是某个进程似乎做了很多操作,可能需要查看当前user的共享连接。对此可以使用 v$session视图查看应用的状态和使用的连接类型,可以使用v$circuit获得相应的serversessiondispatcher addresses

5shared servermemory 使用:之前有说过,当使用shared server模式时,部分称为UGAuser global area)的数据将被存放在shared pool中,同时sessiondata Components被存放在large pool中。如果没有设置large pool,将存放在shared pool中。
从总体将使用shared server模式,内存的开支减少了。
shared servers
使用UGA用于sorts,此模式下,应该设置SORT_AREA_RETAINED_SIZE相对小于SORT_AREA_SIZE,以便可以快速释放内存给其他user

6troubleshooting:常见问题有:
1
)所有共享连接都失败时,查看Oracle net listenerrunning
2
)查看是否在建立shared connection时存在Oracle net配置的错误”TNS_”
3
)不要轻易在OSkilluserserver进程,建议使用alter system kill session。如果使用dispatcher连接的,killdispatcher进程会更糟,会影响其他user
4
dispatchersservers都是后台进程,所以在设置PROCESSES时要考虑相应的数量。
5
)如果参数INSTANCE_NAME, SERVICE_NAMES DB_DOMAIN 没有被设置,或是设置不正确,则其不能进行自动instance注册。

• V$CIRCUIT: Contains information about user connections to the database
• V$DISPATCHER: Provides information on the dispatcher processes
• V$DISPATCHER_RATE: Provides rate statistics for the dispatcher processes
• V$QUEUE: Contains information on the multithread message queues
• V$MTS: Contains information for tuning the Oracle shared server
• V$SESSION: Lists session information for each current session
• V$SHARED_SERVER: Contains information about the shared server processes
eg

SELECT d.network network, d.name disp, s.username oracle_user,
s.sid sid,s.serial# serial#, p.username os_user,
p.terminal terminal, s.program program
FROM v$dispatcher d, v$circuit c, v$session s, v$process p
WHERE d.paddr = c.dispatcher(+)
AND c.saddr = s.saddr(+)
AND s.paddr = p.addr (+)
order by d.network, d.name, s.username

 

posted on 2010-01-12 12:32 gdufo 阅读(654) 评论(0)  编辑  收藏 所属分类: Database (oracle, sqlser,MYSQL)

导航

统计

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

Hibernate

友情链接

搜索

最新评论

阅读排行榜

评论排行榜