Oracle 9i 引入了動態 SGA(系統全局區域)管理功能,允許 DBA 在資料庫運行時調整內存分配,無需重啟實例。本文詳細說明如何將傳統靜態參數遷移至動態參數,並正確設定 sga_max_size 以發揮最大效能。
在進行任何變更前,必須完整掌握現有配置。請依序執行以下指令並記錄結果:
SHOW SGA - 顯示目前 SGA 總大小及各組件分配SHOW PARAMETER db_block_size - 確認資料塊大小SHOW PARAMETER db_block_buffers - 傳統緩衝區參數(舊版相容)SHOW PARAMETER buffer_pool_keep - KEEP 池設定SHOW PARAMETER buffer_pool_recycle - RECYCLE 池設定SHOW PARAMETER sga_max_size - 動態 SGA 最大上限SHOW PARAMETER cache_size - 各快取區域大小SHOW PARAMETER statistics_level - 統計層級(建議設為 TYPICAL 或 ALL)若原有 buffer_pool_keep 與 buffer_pool_recycle 已設定,新參數對應關係如下:
db_keep_cache_size = buffer_pool_keepdb_recycle_cache_size = buffer_pool_recycle參考 Metalink Note 564861,一般情況下這兩個參數建議不額外設定,除非有明確的物件存取模式需求。
sga_max_size 必須滿足雙重約束條件:
SHOW SGA 結果)建議預留 10-20% 成長空間,以應對未來負載增加。
-- 範例:將 SGA_MAX_SIZE 設為 2GB,並啟用動態快取
ALTER SYSTEM SET sga_max_size = 2G SCOPE=SPFILE;
ALTER SYSTEM SET db_cache_size = 1G SCOPE=BOTH;
ALTER SYSTEM SET shared_pool_size = 512M SCOPE=BOTH;
-- 重啟實例使 sga_max_size 生效後,可線上調整其他參數
SCOPE=BOTH 即時生效並持久化V$SGA_DYNAMIC_COMPONENTS 及 V$SGA_RESIZE_OPSstatistics_level = TYPICAL 確保自動調優顧問正常運作透過系統化的參數遷移與合理的 sga_max_size 設定,Oracle 9i 即可充分發揮動態內存管理優勢,在不中斷服務前提下靈活應對負載變化。