<轉>oracle效能調整讀書筆記(4)

wuhesheng發表於2009-07-16
 

第五章 調整資料快取 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;
· 持續觀察上面的查詢,如果發現未使用記憶體很大或者不斷增加,表示大池可能分配了太多的記憶體,如果未使用記憶體很小或者不斷減少,表示可能需要加大大池的記憶體。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/119501/viewspace-609378/,如需轉載,請註明出處,否則將追究法律責任。

相關文章