通過記憶體鎖定,解決ORA-4031錯誤

lnwxzyp發表於2011-11-11

   這兩天一個市州的資料庫頻繁遇到了ORA-4031錯誤, 連執行shutdown immediate關閉資料庫都不行,提示如下類似錯誤:ORA-04031: unable to allocate 4064 bytes of shared memory ("shared pool","unknown object","sga heap(1,0)","kglsim heap"),經過檢視,發現系統的記憶體幾乎已經被耗盡了,同時還使用了大量的交換分割槽,由於任何語句都無法執行,因此先停掉了監聽,然後殺掉了所有的會話
$ ps -ef |grep LOCAL=NO|grep -v grep|awk '{print $2}'|xargs kill -9

殺掉之後,資料庫的資源得到了釋放,就可以正常執行查詢了,為了保險起見對資料庫進行了重啟,重啟之後暫時正常了,不想不到一週時間又出現了4031錯誤,於是讓值班的同事又重啟了資料庫,看這個情況,基本上是每隔一段時間就會出現記憶體使用緊張的情況,然後導致資料庫出現4031錯誤。感覺可能是由於記憶體的大量換頁造成的, 於是考慮使用記憶體鎖定能不能解決這個問題,首先備份spfile檔案,然後對記憶體引數進行了調整

alter system set lock_sga=true scope=spfile;

alter system set pre_page_sga=true scope=spfile;

alter system set sga_max_size=4224M scope=spfile;

alter system set sga_target=4224M scope=spfile;

alter system set java_pool_size=48M scope=both;

按照系統字典當中相關的advice檢視對沒有使用過的java pool進行調整,啟用lock_sga和pre_page_sga引數然後關閉資料庫,關閉之後用root使用者 修改/etc/security/limits.conf ,增加 oracle - memlock unlimited

然後修改 /etc/sysctl.conf 修改

 kernel.shmall = 7516192768
kernel.shmmax = 7516192768

sysctl -p 讓設定生效

root執行 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) 71680
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 2047
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

還要修改max locked memory引數

ulimit -l unlimited

由於設定之後只是當前環境生效,退出再連線之後檢視依然是 64,還要把這一句加入到/etc/profile檔案中
然後啟動資料庫,接著觀察一段時間看記憶體的使用情況再來做微調了。

 

後記:
  經過進一週的觀察,4031沒有再次出現,alert log裡面也沒有什麼特別的錯誤,基本上達到了本次調整的目的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12216142/viewspace-710795/,如需轉載,請註明出處,否則將追究法律責任。

相關文章