第五章 调整数据缓存 2.测量数据缓存的性能 数据缓存命中率 · 数据缓存命中率由下面四个来自V$SYSSTAT的统计值计算得来: physical reads 从磁盘读取的块数; Ø physical reads direct 从磁盘读取不进入数据缓存的数据块数; P_H_\KsH*( Ø physical reads direct (lob) 从磁盘读取不进入数据缓存的LOB对象块数; PfB9 .f { Ø session logical reads 从数据缓存中读取的块数,包括当前读(Current, db_block_gets)和一致性读(consistent gets); ^ R ) ]_ · 命中率 = 1- ((physical reads – physical reads direct – physical reads direct (lob)) / session logical reads),调整好的OLTP系统,数据缓存命中率应该在90%以上; >6@,L+-6r · 查询语句如下: OECVExb@eH select 1 – ((physical.value – direct.value – lobs.value) / logical.value) ,2 i1 4H from v$sysstat physical, K oWG:~>| v$sysstat direct, ~r'A peI9 v$sysstat lobs, , t 9C P v$sysstat logical : Z_ab Kt where physical.name = ‘physical reads’ yJlRW !@&: and direct.name = ‘physical reads direct’ B O6XY9 0( and lobs.name = ‘physical reads direct (lob)’ a5d_= :S ; and logical.name = ‘session logical reads’; 0AoWw-H 6V s $ 0dLEa9 数据缓存等待 6l kCLH · free buffer inspected 用户服务器进程为了将数据从磁盘读到数据缓存,在数据缓存中查找可用的块,在找到可用块之前共查找过的缓存块数; osLEH?i KW · free buffer waits 用户服务器进程为了将数据从磁盘读到某个脏块,需等待DBW0将这个脏块写回磁盘; 9 8 uM D · buffer busy waits 用户服务器进程要存取某个缓存块,如果有其它会话正在使用它,必须等待其完成,可能的原因有: fi &>;0? 7 Ø 并行插入时表的Free lists不足引发段头等待(改用LMT可消除此影响); - k u8n%u Ø 并发事务较多时表的InitTrans太小引发事务等待(增大表的InitTrans); }>3jHWxLc Ø 回滚段不足时引发undo header等待(增加回滚段的个数); ]~ S zb · 一起查询时用下面的语句: -b ?s\X select name,value from v$sysstat where name = ‘free buffer inspected’ =vD DfPR union b h fKhXh8 select event,total_waits from v$system_event where event in (‘free buffer waits’,’buffer busy waits’); Wrt5 eYy :SZi4:4-J8 Statspack中存放数据缓存性能数据的位置 % x p 69 · Instance Efficiency Percentages (Target 100%)(实例命中率) – Buffer Hit %; f >Tn # OW · Instance Activity Stat (实例的活动统计) – free buffer inspected, physical reads, physical reads direct, physical reads direct (lob), session logical reads; (ti E%nF+ · Buffer Pool Statistics (数据缓存统计) -- free buffer waits, buffer busy waits。 RS2uk 7MB w (*} , Q*e\I8R} 第五章 调整数据缓存 3.增大数据缓存 Dh V LfKN )g /H djP xH 改进数据缓存的性能 vu:] [2" 0 改进数据缓存的性能有下面一些方法:增大数据缓存,用多个数据缓存池,将小表CACHE到数据缓存,绕过缓存池,正确地使用索引 lx> ."r W fG WXUJ 增大数据缓存 A P ]`'C · 改进数据缓存性能最简单的方法就是增大这块内存,加大数据缓存后,缓存块就可以在LRU列表上呆更多的时间,从而提高命中率,free buffer inspected, buffer busy waits, free buffer waits这三个统计值也会相应降低; ((=T E · 与数据缓存相关的初始参数有下面的一些: Q07& 7S H_ Ø DB_BLOCK_SIZE 主块字节数,在数据库创建时指定,不能更改,SYSTEM和TEMP表空间只能使用主块创建,后面提到的调整方法主要是针对主块缓存池来进行讨论的; DHZ`y[&}|N Ø DB_CACHE_SIZE 指定默认缓存池的大小,不能为零,用于存放主块; F4 5-M [z Ø DB_KEEP_CACHE_SIZE 指定保持缓存池的大小,默认值为零,用于存放主块; cM]ZY i Ø DB_RECYCLE_CACHE_SIZE 指定回收缓存池的大小,默认值为零,用于存放主块; ) _6W@s Ø DB_nK_CACHE_SIZE 默认值为零,这些参数指定用于容纳不同于主块大小的数据块的缓存空间,创建其它表空间时可以使用与主块不同的块大小(先设置好对应参数再创建表空间,存在对应的表空间时,这些参数不能再更改回默认值),不要更改与主块大小相同的那个参数的默认值。 ~ e a K]| · 动态修改数据缓存的大小;可以用ALTER SYSTEM命令动态修改数据缓存的大小,但必须记住下面三条规则: Pc <0 kQg Ø 最终生效的大小是最小粒度的整数倍; v:n [ H]K| Ø 共享池,数据缓存,日志缓存之和不能大于SGA_MAX_SIZE的值; ; v/un Ø DB_CACHE_SIZE不能指定为零。 mA@!t>=oMq · 手工更改数据缓存的大小:关闭实例,更改参数,再重启,这种方法适于同时更改SGA_MAX_SIZE; ^'f gQ yj · 确定数据缓存的合适大小:用Buffer Cache Advisory n zbAQ3v Ø 设置参数DB_CACHE_ADVISE的值为ON(设置为OFF时关掉ADVISORY,设为READY时预先给ADVISORY分配内存,但不分配CPU,以防将该参数改为ON时出现内存不足的错误); iio- RT?! Ø 待ADVISORY运行一段时间(30分钟以上)后,再查询V$DB_CACHE_ADVICE,相关字段的意义如下表: ü ID 缓存池编号 hljKBx ~ ü NAME 缓存池的名字 nF< xJ s ü BLOCK_SIZE 块大小 * )Cr1d k ü ADVISE_STATUS 参数的状态:ON, OFF, READY y)a)VvU" : ü SIZE_FOR_ESTIMATE 评估缓存大小(M) wG9aX* ( n ü ESTD_PHYSICAL_READS 评估的物理读 dv+Z xP% g Ø 评估的物理读趋于稳定时的评估缓存就是最合适的大小。
第五章 调整数据缓存 4.用多个数据缓存池 ]1 W xa? f\_ PNZCc v; 9(FLtL 用多个数据缓存池 z GyRz xFN · 默认情况下,数据缓存中只存在一个(默认)缓存池,有可能出现这样的情形,某个用户程序偶尔存取一个很少使用的大表(非全表扫描),将缓存中其它用户经常使用的缓存块挤出,为了解决这个问题,可以定义多个缓存池,将段明确地指定给某个缓存池; +$ nN YD · 可以创建三种缓存池,根椐段被存取频率的不同将段指定给不同的池: N { Z + Ø Keep Pool 用于存放你想在缓存中保留时间尽可能长的段; N Ø Recycle Pool 用于存放你想在缓存中保留时间尽可能短的段; G"J nQ Ø Default Pool 存放不同于上面的其它的段; l ~o!(rpX · 与8i不同,9i各个池的内存分配是相互独立的; L{ & 2 P · 确定哪些段适于存放在哪个缓存池中; } a E' Ø 要确定段与缓存池的对应关系,需要对应用程序,段及段的存取方式有一个整体的了解; * 6 AV^^ Ø 了解目前已缓存的段的信息有助于确定段与缓存池的关系,V$BH, V$CACHE中都含有缓存的详细数据,下面两个查询作用类似,都能确定已缓存块的段名,所属用户名,段类型及缓存块数: P}5bSQ( a3 ü Select Obj.Owner, !;*fl r `/ Obj.Object_Name, - +1O * L! Obj.Object_Type, j] kgdAq> Count(Distinct Bh.Block#) "Num of Buffers" l3F$5 n From V$bh Bh, Dba_Objects Obj Ro9:kE G$ Where Bh.Objd = Obj.Object_Id U& ])ow): And Owner <> 'SYS' 8, IF%Z+LI Group By Obj.Owner, Obj.Object_Name, Obj.Object_Type; Sdmz (R ü Select u.Username, l BFKfLp& c.Name, *Oy* \cX2[ c.Kind, A A^K /y Count(Distinct c.Block#) "Num of Buffers" lG0CCOdQ From V$cache c, Dba_Users u 6T4Du F Where c.Owner# = u.User_Id 0' F/z%SMj And u.Username <> 'SYS' bi }aVtG~z Group By u.Username, c.Name, c.Kind >2 >/ q ? Ø 推荐经常使用且小于默认缓存池10%的段置于Keep池中; P^F 3, ' N Ø 推荐只由个别事务使用且大于默认缓存池200%的段置于Recycle池中; REU&8J@k&? · 确定每个池的合适大小;在确定了段和各个池的对应关系后,可以通过DBA_SEGMENTS.BLOCKS查出对应池的段块之和,计算出各个池占用比例,再根椐缓存池的总大小可以确定每个池的大小;在末经精确计算的情况下,ORACLE推荐先按下面的比例为各个池分配空间:Default Pool 60%, Keep Pool 30%, Recycle Pool 10%。 iNk N'( " · 创建缓存池;根椐前面提到的方法,动态或手工更改这三个参数(DB_CACHE_SIZE, DB_KEEP_CACHE_SIZE, DB_RECYCLE_CACHE_SIZE),可以创建缓存池; ]}'bRq *] · 将段指定给缓存池; %- fX a2 Ø 可以在创建段时指定缓存池:Create … STORAGE ( BUFFER_POOL pool); c0 e[ vrP: Ø 也可以更改段的缓存池属性:Alter … STORAGE ( BUFFER_POOL pool); UZFs ]z!,k Ø 上面的pool可选值为KEEP, RECYCLE, DEFAULT(默认值); k* 2kh h- Ø DBA_SEGMENTS.BUFFER_POOL字段可以查到段的缓存池属性; e % ro7~ Ø 更改段的缓存池属性并不会立即生效,需等到段下一次从磁盘载入缓存池时才能生效。 < f :(nG j · 监控各个缓存池的性能; aJ=)5%$6kc Ø V$BUFFER_POOL性能视图: Name(缓存池的名字), Block_Size(池的块大小,Byte), Current_Size(缓存池的当前大小,M)。 }sqFv a b< Ø V$BUFFER_POOL_STATISTICS,包含每个缓存池的相关统计,可用来计算单独缓存池的命中率,重要的字段如下: ` 2 + TN ü NAME 4IO qSB| ü DB_BLOCK_GETS Q: -& ü CONSISTENT_GETS R 8 6i2', ü PHYSICAL_READS = v?V ü FREE_BUFFER_INSPECTED &'PLOyW w ü BUFFER_BUSY_WAITS 8* m,# ü FREE_BUFFER_WAITS sT iFh"8d> ü Select Name "Buffer Pool", peS4 1 - (Physical_Reads / (Db_Block_Gets + Consistent_Gets)) "Hit Ratio" fCs{%-6c P From V$buffer_Pool_Statistics K ",X e> Where Db_Block_Gets + Consistent_Gets > 0; :*l\j"f X5 ü 经过调整后各个缓存池的命中率,Keep池的应该很高,Recycle池的应该很低,Default池应该为70~80%。 E\I z:ES^ · 命中率高并不总是代表性能好; D & N3 LH Ø 单纯的缓存命中率高并不代表缓存的性能很好,在RBO下,不正确的建立索引可能导致性能低下而缓存命中率却相当高,比如在一个经常使用表的低集势栏位上建二叉树索引就可能出现这种情形,系统不停而低效地扫描索引,导致出现虚高的缓存命中率; I&1.}{G >F Ø 通过分析V$BH,V$CACHE的查询结果,结合对应用程序工作方式的理解,可以发现这种情况; 1 csbu R? Ø 按下面的处理可以消除这种可能: Gh3f^P Wnc ü 收集方案的统计并使用基于CBO的优化器; } LW rtmc ü 创建在Where条件中使用率高的栏位的柱状图统计; -=u9>S)!c ü 正确地使用多个缓存池。 Mp J3*$Dr ZM =eiJ Z !0X"^ VB 第五章 调整数据缓存 5.其它提高数据缓存性能的方法 nu16L$ ] gi? wf q 6 4bP4K 将小表CACHE到数据缓存 b U4\ Yu · 在多个缓存池的配置下,每个缓存池都是由独立的LRU算法来管理的,通常情况下刚存取的块都是放在LRU列表的开始端,而FTS(全表扫描)例外,刚读入的块放在LRU列表的末端; W D 7 T&i · 上述算法会产生如下一些困境:CBO在读取一些小表或者读取表中的较多数据时会使用FTS,这时,即使这些表使用频率很高,也会因为上面提到的原因而很快被老化,在下次用到时又得重新读入; d\ Xi j y · 为了解决这个难题,引进了Cache表的概念,将表设为Cache后,对表的FTS不再是将块放在LRU列表的末端,而是置于LRU列表的开始端; i xF · 有下面三种方法将表设为Cache: wA% ,_s /U ü 创建时指定CACHE关键字:Create table … cache; !R$ t >X ü 更改时指定CACHE关键字:Alter table … cache; ?uE@ C3 e ü 查询时指定CACHE hint:select /*+ cache */ * from …; x#tP)5n?s* · 从DBA_TABLES.CACHE字段可以查到由前两种方法设置的表的CACHE属性。 8.D9Op U =q*j" . < 绕过缓存池 0$ q )uip · 下面两种特定的操作可以绕过缓存池,读入的数据块不进入数据缓存,而存放在内存中由用户服务器进程控制的其它区域(UGA,PGA?): 8 >V)S AI' ü Sort Direct Writes(第八章调整IO时会讲到); Q>>II|~;J ü Parallel DML(由多个服务器进程来执行一个DML操作,只有当系统中有多个CPU,多个IO子系统以及足够内存时才可考虑作这样的设置,并行DML超出本书讨论的范围)。 [ e` 6gGO ^ N m!b 正确地使用索引 A · 不正确的全表扫描会极大地降低数据缓存的命中率,创建正确的索引后可以提高数据缓存性能; dn@_\ 5 · 建议尽可能地在外键上创建索引,这可以提高多表连接的效率。
第六章 调整SGA的其它区域 1.共享服务器的概念 &pZ n cm V mf !0 - 7 S]< ?>* 第六章 调整SGA的其它区域 % $ CV?K$C · 已讨论过的共享池,数据缓存和下一章将要讨论的日志缓存是每一个ORACLE环境下的必备组件,这一章讨论SGA的另外三个可选组件:共享服务器,大池,Java池。 Gj H$ !P=. H^ r;,Q$9 共享服务器的概念 5l[&-: (Lh · 每一个Oracle应用程序有两个与之相联的进程,一个是运行在客户端机器或者应用服务器上的用户进程,一个是运行在Oracle服务器上的服务器进程; e -Ma8+X\ · 默认的专用服务器配置下,每一个服务器进程只专职于处理一个用户会话的请求,在Unix上,服务器进程是一个可用ps命令观测到的单独的进程,在Windows系统上,服务器进程是一个运行于oracle.exe进程中的线程; eNc>^:&y * · 另有一种配置称为共享服务器,少数一些服务器进程为所有的用户进程服务,在9i以前的版本,这种配置也称为MTS(多线程服务器); ] wm< $ +@ · 专用服务器和共享服务器的差别有点类似于外出时坐专车和打的士的区别,专用服务器能更有效地实现用户进程和实例间的通讯,但资源利用率低,共享服务器资源利用率高,在相同的CPU和内存条件下可以支持更多的并发用户,但配置不当时会引起用户进程较长时间的等待从而降低系统的性能和响应速度。 Ci(c`1a v 第六章 调整SGA的其它区域 2.共享服务器的架构 c$^~7.~{Qy r &3EM[*Iw Kw =][}d`D 共享服务器的架构 D=@bPB > 共享服务器配置包含以下组件: bJoP @s · 用户进程(User Process) 用户进程可能由客户端软件产生,也可能通过中间组件产生,用于管理到Oracle服务器的连接; ^C' {# p " · 网络监听进程(Oracle Net Listen Process) 监听进程用于监听来自用户进程的对数据库的查询或DML请求,并将这些请求分配给当前比较清闲的某个调度进程; Q z 4Do6#y · 调度进程(Dispatcher Process) 调度进程是Oracle的后台进程,用于接受来自用户进程的请求并返回结果,最多只能有五个同时运行的调度进程,在Unix上可以用ps命令看到,用Unix kill命令杀掉一个调度进程时会同时断开这个进程负责的所有用户进程; IoZ _zz0 · 请求队列(Request Queue) 请求队列用于存放调度进程接受到的请求,存在于SGA中,一个实例只有一个; w@WPp0mny · 共享服务器进程(Shared Server Process) 共享服务进程是Oracle的后台进程,用于与SGA交互来处理用户进程的请求,功能与专用服务器类似(用于解析SQL语句,将数据块从磁盘读入数据缓存,等等),服务器进程的最大数量由操作系统指定; !v . · 响应队列(Response Queue) 响应队列用于存放共享服务器进程处理的结果,存在于SGA中,每个调度进程对应一个,调度进程将这些结果返回请求的用户进程; qSt \ 6~ · 必须满足下面条件时才可配置成共享服务器: %UlgG 1?A Ø 众多的应用程序用户; 一般并发用户数在200以上时需要考虑,具体要看服务器的CPU和内存资源; ' ^`iF,r g Ø 事务时间短;长事务会造成少数用户独占服务器进程,而使其它用户长时间地等待,不适于配置成共享服务器。 @r=,: 'Mt Ø 不连续的事务;用户活动间有时常的停顿,通常OLTP事务就是如此,这时服务器进程能为其它用户提供服务。
第六章 调整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; · 持续观察上面的查询,如果发现未使用内存很大或者不断增加,表示大池可能分配了太多的内存,如果未使用内存很小或者不断减少,表示可能需要加大大池的内存。
|