你對Oracle10g 管理系統全局區(SGA)的實際應用是否了解?對其的一些相關步驟的運行是否了如指掌?如果你對Oracle10g 管理系統全局區(SGA)的相關內容感興趣的話,你就可以浏覽我們的文章。
有幾個影響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 參數所設定的值.
如果沒有指定,那麼默認把所有初始化參數中指定的內存組件的和作為期缺省值.
使用自動共享內存管理
通過使用SGA_TARGET參數來啟用自動共享內存管理.以前手動分配的類似Java_pool,large_pool這樣的共享內存組件將被自動管理,另外,你必須確保STATISTICS_LEVEL初始化參數設置為TYPICAL(默認值)或ALL.
SGA_TARGET初始化參數反映了SGA的大小.
表2-3 自動分配大小的SGA組件和相應的參數
SGA 組件 初始化參數
Oracle10g 管理系統全局區(SGA)在固定的SGA和其他Oracle數據庫實例需要的內部分配 不可用
共享池 SHARED_POOL_SIZE
大型池 LARGE_POOL_SIZE
Java池 Java_POOL_SIZE
緩沖區高數緩存 DB_CACHE_SIZE
表2-4 手動分配大小的使用SGA_TARGET空間的SGA組件
SGA 組件 初始化參數
日志緩沖區 LOG_BUFFER
The keep and recycle buffer caches DB_KEEP_CACHE_SIZE
DB_RECYCLE_CACHE_SIZE
非標准緩沖區高數緩存塊大小 DB_nK_CACHE_SIZE
流池 STREAMS_POOL_SIZE
在手動管理模式下執行如下SQL查詢得到SGA_TARGET的值.
SELECT (
(SELECT SUM(value) FROM V$SGA) -
(SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)
) "SGA_TARGET"
FROM DUAL;
然後你可以刪除由Oracle自動管理的共享內存相應的初始化參數.
例如,當前你在手動管理模式下由如下配置,並且SGA_MAX_SIZE 設置為 1200M:
SHARED_POOL_SIZE = 200M
DB_CACHE_SIZE = 500M
LARGE_POOL_SIZE=200M
以上的相關內容就是對Oracle10g 管理系統全局區(SGA)的介紹,望你能有所收獲。