第六章 调整SGA的其它区域 3.配置共享服务器 W w " ] 3
9Y@ eXP
wb vOf X
配置共享服务器 %w?C)$Kn\
· 配置共享服务器时需要正确地设置下面几个初始化参数,这些参数用于指定实例启动时产生的调度进程和共享服务器进程的数量,以及运行期间如何管理这些进程; =k>fW7 e
Ø DISPATCHERS 指定实例启动时产生的对应网络协议的调度进程数量,可选值是0-5; _ z J /z
Ø MAX_DISPATCHERS 指定实例允许的最大调度进程数,默认值为5,调度进程的增减必须由管理员手工指定(Alter system set dispatchers = ?); #d 06wY z=
Ø SHARED_SERVERS 指定实例启动时产生的共享服务器进程数量,设为零时禁用共享服务器选项,最小值为1,最大值依赖于操作系统; m'N8[ o| h
Ø MAX_SHARED_SERVERS 指定实例允许的共享服务器的最大数量,最大值依赖于操作系统,服务器进程可由PMON后台进程根椐系统负载来动态增减; t2YB(6w+xg
Ø CIRCUITS 用于指定网络连接的虚拟电路最大数量; (z8 ;J> 7
Ø PROCESSES 用于指定实例允许的进程的最大数量; ( mn:! 3H%
· 管理员执行管理操作时不能使用共享服务器,必须启动专用的服务器进程。 N &eo;Ti
' Ttsscv
第六章 调整SGA的其它区域 4.测量共享服务器的性能 >M S K.SNh
c~O L r
d J/gc"7aO
测量共享服务器的性能 -* R f [|Z
· 测量共享服务器配置的性能可用到下面一些性能视图: UP$> ,05z6
Ø V$SHARED_SERVER 共享服务器进程的详细统计,包括每个进程的空闲和繁忙时间; < \fA}b
Ø V$QUEUE 包含请求队列和响应队列的信息; : o8 |P
Ø V$SHARED_SERVER_MONITOR 关于共享服务器进程的合计信息,包含经由PMON启动和终止的共享服务器进程数,共享服务器进程的高水位,并发会话的最大数量,虚抑电路的最大数量; y `L .#5T
Ø V$DISPATCHER 调度进程的详细统计,包括每个进程的空闲和繁忙时间; W] DGt|JP
Ø V$DISPATCHER_RATE 包含调度进程服务的历史和实时的统计; dKCl#~LAI'
Ø V$CIRCUIT 包含连接路径(用户进程和调度进程,共享服务器进程的关系)的统计, [Z"Z5e `
· 测量共享服务器进程的性能 2>o^@4PnZ
Ø 共享服务器进程的忙百比例: o$l 8" Uv
Select Name, >r 7PK45.K
Decode(Busy + Idle, 0, 0, Round((Busy / (Busy + Idle)) * 100, 4)) "busy_rate" vA!IcDP"
From V$shared_Server }BU% <5CQ
Where Status != 'QUIT'; = pi, ] m
L( K 5f 7\
Ø 用户请求在请求队列中的平均等待时间(百分之一秒) }q]*aA De
Select Decode(Totalq, U) Hc 7% e
0, 035jU '
'TOTALQ IS ZERO', )Cj1VjAg
Round(Sum(Wait) / Sum(Totalq), 4)) "AVG SHARED_SERVER WAIT" @@K/0: ],
From V$queue 9uWg4 U
Where Type = 'COMMON' D !Y@Og .
Group By Totalq; fXWE4 ^jU
WH BGh U
Ø 当上面的数值很大或者不断上升时需要考虑增加SHARED_SERVERS的值; 0LL65 [
}J ST(d &
· 测量调度进程的性能 n : wA xU
Ø 调度时程的忙百分比(当这个比例超过50时,需要增加DISPATCHERS 的值): m Mllen
Select Name "Dispatcher", .hx FF k%5
Network, -QJ8\/1>
(Round(Sum(Busy) / (Sum(Busy) + Sum(Idle)), 4)) * 100 "Busy_Rate" 3GK KC9C6
From V$dispatcher R'tvF$3=i
Group By Name, Network; zf I{cMn'J
$Bc3| `K1v
Ø 用户请求等待调度进程调度的平均时间(百分之一秒) XX 90 I s
Select Decode(Totalq, _i 7yyt ;h
0, - wx~*
'TOTALQ IS ZERO', LU8[$.P
Round(Sum(Wait) / Sum(Totalq), 4)) "AVG DISPATCHER WAIT" r 7V !M1
From V$dispatcher d, V$queue q L1G)/V kw
Where d.Paddr = q.Paddr \v=@ '
And q.Type = 'DISPATCHER' M6A 0D+ 08
Group By Totalq; {"$ [MY i:
OJA_OqVp$K
Ø 调度进程服务的连接数量(当前,历史最高以及差异) pJ1 \ @G
Select Name, s3@mk\?qMe
Cur_In_Connect_Rate, A1 Uy |D l
Max_In_Connect_Rate, rx9y^E5T`;
Max_In_Connect_Rate - Cur_In_Connect_Rate "VARIANCE" a - F I`Dv
From V$dispatcher_Rate; iV# A-9
zAklS 7L
· 查询共享服务器环境下的累积活动: KDP 4 7 A
Select * From V$shared_Server_Monitor; !||Gf i a
· 查询用户进程,调度进程和共享服务器进程间的对应关系: { 29 a Nm
Select s.Username, d.Name "DISPATCHER", Ss.Name "SHARED_SERVER" ew dTsgt '
From V$circuit c, V$session s, V$dispatcher d, V$shared_Server Ss &hL2x x=
Where c.Saddr = s.Saddr 7 wE v`5
And c.Dispatcher = d.Paddr m DbTOtD
And c.Server = Ss.Paddr;
第六章 调整SGA的其它区域 5.改进共享服务器的性能 Dg0r VV6c
#\D 74$D
6XU p$Pd (
改进共享服务器的性能 ?#Z4Dg 9|
· 共享服务器环境下的性能调整方向是,在现有的资源配置下支持更多的用户,而不是一定要如何提高系统的吞吐量或响应时间; C f d* Q
· 性能问题表现在以下三个方面:相关的SGA组件配置不充分,共享服务器进程太少,调度进程太少; *xsBFCRU
· 相关的SGA组件配置 * kqC^2 t
Ø 共享服务器配置下,用户的会话与游标信息是存放于UGA中的(专用服务器配置下存放于PGA中),UGA通常存在于共享池中,共享池的主要功能是用来缓存SQL语句及数据字典的,这就要求共享池有足够的空间,不致于因UGA的消耗而降低系统的库缓存命中率和字典缓存命中率; Rky ]F+J
Ø 下面的查询语句可以看到系统UGA占用的空间,这个空间占用是动态变化的: vMEN14;yH_
Select Sum(s.Value) "Total UGA Bytes" ;xzaW 4(3
From V$sesstat s, V$statname n }a~h d*-#
Where s.Statistic# = n.Statistic# = %I yR
And n.Name = 'session uga memory max'; ` }= R
Ø 在配置了大池后,部分UGA数据会从SGA中移到大池中; ^- k "gLg
· 有三种改变共享服务器进程数量的方法: T pF [-fO
Ø PMON后台进程能够根椐系统的负载动态增减服务器进程的数量;
Ø 管理员动态增加服务器进程的数量:Alter system set shared_servers = xx; #d\ &6' O
Ø 管理员手工增加服务器进程的数量:更改初始参数shared_servers的值,再重启; .U L 2(0
· 改变调度进程数量的方法只有两种
Ø 管理员动态增加调度进程的数量:Alter system set dispatchers = ‘tcp,5’; 9!Mh (KtQ
Ø 管理员手工增加调度进程的数量:更改初始参数dispatchers的值,再重启; m-
Ø 用户进程在其生命周期里只和一个调度进程发生联系,新加入的调度进程只能为在它之后产生的用户进程服务; " E2 0Y"[h
Ø Oracle推荐配置是,每个调度进程服务250个左右的并发用户连接; . i 4aM;Qy
t f6 m .
第六章 调整SGA的其它区域 6.大池的概念 n~y K q" ^
) Ac, F6w
YTefEG] |q
大池的概念 O pu *i
· 共享池除了用于缓存SQL外,还有用于容纳下面的一些特殊用途的数据:DBW0附属进程,UGA,RMAN,Parallel Query,当这些选项被使用后,共享池的命中率可能会下降很多,为了解决这个问题,Oracle提供一个新的内存区域来存放这些数据,这就是大池; u ?72]?SM
· 用LARGE_POOL_SIZE这个参数来配置大池,这个参数默认值是零,可选值在600K到2G之间,一旦配置了大池,Oracle会自动使用大池来缓存上面提到的数据; Sr6'$8# >Y
· PARALLEL_AUTOMATIC_TUNING置为真时,大池的空间是动态的,由系统控制; $EFS_ *
· 可以使用下面的查询看到大池已使用和未使用的内存:Select * From V$sgastat Where Pool = 'large pool'; G)< B7-72;
· 持续观察上面的查询,如果发现未使用内存很大或者不断增加,表示大池可能分配了太多的内存,如果未使用内存很小或者不断减少,表示可能需要加大大池的内存。