有幾個影響SGA內存分配數量的參數,除了SGA_MAX_SIZE ,其他都是動態參數,也就是說在數據庫運行期間可以使用ALTER SYSTEM 語句動態修改的參數.SGA的大小是動態的,通過修改這些參數可以是SGA增長或收縮.
SGA組件和SGA內存顆粒
由許多內存組建組成,他們是用于滿足特定內存分配請求的內存池.例如共享池(用于緩沖磁盤數據塊),所有的SAG以一個最小的內存單元顆粒分配和回收內存空間,Oracle在系統內部追蹤SAG的內存單元的分配和使用情況.
SGA的內存分配是通過顆粒進行分配的,顆粒大小由SGA的大小決定.一般來將,在大多數平臺,如果SGA小于等于1G,那么顆粒大小為4MB,如果大于1G,顆粒的大小為16MB,不同的是在32位Windows平臺下,SGA大于1G時,顆粒大小位8MB而非16MB,詳細信息,查看操作系統文檔.
可以通過V$SGAINFO 系統試圖查看由某個實例使用的顆粒大小.同樣的大小用于所有SGA的動態組件.
如果指定的SGA組件的大小不是顆粒大小的整數倍,那么Oracle將會四舍五入求整而得到其整數倍值,賦給SGA內存組件.而不是你所指定的大小.例如如果顆粒大小為4MB,你給 DB_CACHE_SIZE 參數設定為10MB,那么實際分配的內存將會是12MB.
限制SGA的大小
SGA_MAX_SIZE 參數指定SGA在實例的生命期內的最大數.動態修改這些參數影響的Buffer cache,shared pool,large pool,java pool,和streams pool的大小,和SGA的總大小.但是不能超過SGA_MAX_SIZE 參數所設定的值.
如果沒有指定,那么默認把所有初始化參數中指定的內存組件的和作為期缺省值.
使用自動共享內存管理
....................