SGA_MAX_SIZE

SGA_MAX_SIZE
假設sga_max_size的大小設置爲500M,os一般是不會在oracle啓動的時候就給它全部的實際內存,而可能只給200M。隨着程序的運行,Oracle不斷的需要內存,而假設計算機的所有實際內存只有500M,那麼很肯定的是OS不可能把全部500M實際內存分配給oraclesga,可能也最多就給了350M,剩下的150M使用虛擬內存。
假設我的機器物理內存(實際內存)足夠多,如何讓Oracle所申請的SGA內存全部在物理內存中呢,因爲假設使用了虛擬內存,必定會帶來額外的PAGE IN/PAGE OUTI/O操作,這是很不合算的。這個問題其實就是在物理內存中固定SGA的問題,這要涉及到另外兩個參數LOCK_SGAPRE_PAGE_SGA以及具體操作系統是否支持內存鎖定


SQL> select *  from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
PL/SQL Release 10.2.0.1.0 - Production
CORE  10.2.0.1.0  Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

1.查看lock_sga和pre_page_sga參數的默認值
SQL> show parameter sga

NAME  TYPE  VALUE
------------------------------------ ----------- ------------------------------
lock_sga  boolean  FALSE
pre_page_sga  boolean  FALSE
sga_max_size  big integer 724M
sga_target  big integer 724M

2、修改lock_sga和pre_page_sga參數
alter system set lock_sga=true scope=spfile;
alter system set pre_page_sga=true scope=spfile;
3、關閉數據庫時再重啓數據庫出現以下錯誤
startup;

ORA-27102: out of memory
Linux-x86_64 Error: 12: Cannot allocate memory

原因很簡單,Linux操作系統對每一個任務在物理內存中能夠鎖住的最大值做了限制!需要手工進行調整。
4、“ORA-27102”及“Cannot allocate memory”問題處理
1)使用“ulimit -a”命令獲得“max locked memory”的默認大小
 [root@dbmain ~]# ulimit -a
core file size  (blocks, -c) 0
data seg size  (kbytes, -d) unlimited
scheduling priority  (-e) 0
file size  (blocks, -f) unlimited
pending signals  (-i) 20479
max locked memory  (kbytes, -l) 32
max memory size  (kbytes, -m) unlimited
open files 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章