如何動態擴大oracle 9i SGA區中的內存空間?

Oracle 9i 具有動態SGA的功能,用操作系統命令查看系統內存時,發現系統中還有空閒內存. 但爲什麼有時使用oracle 9i 的

sql > alter system set db_cache_size=xxxxM

命令時數據庫會報告錯 -- 沒有足夠的內存. 這是由操作系統引起的嗎?

不是,原因在於此時SGA區中沒有多餘空閒內存。儘管系統中有空閒內存,但未分配給SGA 區。

在oracle 9i 中 動態SGA的概念是無需經過 關閉實例(instance), 修改初始化參數文件和重啓實例這一過程,就可動態調整 buffer cache 和 share pool 的大小。 另外,動態SGA允許在實例運行時設置,下次啓動時將有多少物理內存分配給SGA 這一數據庫參數。 SGA 可用最大物理內存是由SGA_MAX_SIZE 參數來決定的。

在啓動實例時,大小爲SGA_MAX_SIZE 的內存就分配給了SGA,SGA成員(buffer cache, share pool等)根據參數值也會獲得相應的內存。

實例啓動後SGA的各成員所用內存之和可以小於SGA_MAX_SIZE。 數據庫管理員通過使用 alter system 命令來調整SGA成員間的內存分配。 當SGA中有足夠多的空閒內存時,增大share pool 或 buffer cache 才能完成,否則會報內存不足。

另外Share pool 和 buffer cache 的尺寸也可動態縮小。 當實例已啓動,SGA已達到 SGA_MAX_SIZE值,可通過先減少某一成員的內存,再增加另一成員的內存來完成。

SGA成員間是相互獨立的,在成員間分配內存時,其和一定不能大於 SGA_MAX_SIZE , 並且db_cache_size 參數不能等於0。

在OLAP與OLTP混合型的應用環境中,利用動態SGA的功能,可以根據不同時刻應用的優先級,來動態的調整buffer cache 和 share pool 的尺寸,以提高系統的性能 :

a. 當OLTP 應用 優先級高時,縮小 buffer cache 的值,增大 share pool 的值;

b. 當 OLAP 應用優先級高時,縮小 share pool 的值,增大buffer cache 的值。

例如:

1. 增大buffer cache 尺寸

SQL> show parameter db_cache_size; 顯示當前 buffer chache 的大小

NAME TYPE VALUE

-------------------------- ----------- -----------------

db_cache_size big integer 4194304

SQL> alter system set db_cache_size=8M; 增大buffer cache 到8MB。

System altered.

SQL> show parameter db_cache_size;

NAME TYPE VALUE

-------------------------- ----------- -----------------

db_cache_size big integer 8388608

2. 調整參數 SGA_MAX_SIZE (需重啓實例)

SQL> alter system set SGA_MAX_SIZE= 1000M scope=spfile;

System altered.

3. 增大shared_pool_size 尺寸

假設,初始參數值爲:

SGA_MAX_SIZE=128M

DB_CACHE_SIZE=88M

SHARED_POOL_SIZE=32M

SQL>ALTER SYSTEM SET SHARED_POOL_SIZE=64M; 設置share_pool 的內存爲64M

Error ORA-04033, insufficient memory

SQL>ALTER SYSTEM SET DB_CACHE_SIZE=56M; 減少buffer cache 的大小

SQL>ALTER SYSTEM SET SHARED_POOL_SIZE=64M;

Error ORA-04033, insufficient memory

需要等 buffer cache 釋放完,纔可擴大 share pool 的大小

SQL> select * from v$buffer_pool ; 檢查內存釋放是否完成。

SQL>ALTER SYSTEM SET SHARED_POOL_SIZE=64M;

System altered.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章