淺談10G SGA自動管理

football2006發表於2008-07-15

SGA自動管理一些簡單實用知識


SGA自動管理概述
1.為什麼SGA自動管理?
SGA自動管理可以避免手工管理的侷限和不便,簡化資料庫管理工作。

2.如何在SGA自動管理與手工管理之間切換?
透過設定sga_target為零和非零值,可以完成手工和自動管理切換。

3.常用SGA引數問題:
sga_max_size 表示系統可以分配給SGA最大記憶體大小。如果這個引數設定小於SGA各元件大小的和(包括自動管理和手工管理,明式設定和隱含設定),則系統會忽略這個引數設定。但在例項啟動後,查詢這個引數的值自動改為系統實際使用的值。在這種情況下,不能再動態加大sga_target,因為sga_max_size就是當前例項所用SGA。
sga_target 表示SGA自動管理記憶體的大小。可以動態修改,但動態修改時不能超過當前例項啟動時sga_max_size設定的大小。
當這個引數小於最小保守值和時例項啟動時會報錯,並提示sga_target應該是多少大。
Lock_sga 表示要把SGA的分配鎖在記憶體範圍內,不允許擴充套件到磁碟。

4.粒度問題:
SGA小於1G時,粒度為4M。
SGA大於1G時,粒度為16M或更大。這也不是絕對,跟平臺有密切相關。如windows 32bit中,1G以上粒度仍是8M。

5.SGA自動管理範圍

自動管理問題一:如何檢視自動管理SGA各組成配置
方法一
10g ORACLE資料庫預設是啟用spfile,從spfile中建立pfile,在pfile頭部我們可以看到以下引數:
$SID.__db_cache_size=25165824
$SID.__java_pool_size=4194304
$SID.__large_pool_size=4194304
$SID.__shared_pool_size=30485760
$SID.__streams_pool_size=0
可以檢視建立pfile時當時當前例項的SGA配置情況。
這些引數無論是在手工管理或自動管理模式下,人工修改這些引數是不起作用的。


方法二
可以查詢資料庫的隱含引數

__db_cache_size
__java_pool_size
__large_pool_size
__shared_pool_size
__streams_pool_size


附註:在引數檔案(包括pfile or spfile)中設定是不起作用的。
可以查詢這個結果是當前SGA自動管理下各元件分配情況。

自動管理問題二:9i版本中SGA相關設定引數在自動管理中作用
在引數檔案中可以設定以下引數
db_cache_size
java_pool_size
large_pool_size
shared_pool_size
streams_pool_size
這類引數在ORACLE 10G以前就存在的,原先是直接設定SGA中元件的大小。有了SGA記憶體自動管理後,這些引數設定的意義變成了保守的最小 值。即自動記憶體管理在進行調整上述元件大小時,不能把上述元件中任何一個cache size小於這類引數指定的大小。

自動管理問題三:自動管理預設分配規律
1. 最小設定
2. 系統按基線分配設定或按上次調整結果分配
基線分配有一個預設比例,如果由於指定其它元件的最小值,而導致沒有指定最小值的元件分配不到預設比例值的大小,例項不能啟動會報錯提示那個元件分配不到足夠記憶體。
在SGA自動管理的其它元件沒有壓力情況下,新增加SGA_TARGET,增加的記憶體不會新增到那些沒有壓力的元件中。先是加shared pool 和Buffer cache 的大小,shared pool加大到適當大小後,後繼空間全部加到buffer cache。


自動管理問題四:自動管理調整結果問題
一. Pfile 不能儲存調整結果,重啟以後要重新設定。
二. Spfile 可以儲存調整結果。

[@more@]

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

相關文章