通過記憶體鎖定,解決ORA-4031錯誤
這兩天一個市州的資料庫頻繁遇到了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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 記憶體不能為read 記憶體讀寫錯誤的解決辦法記憶體
- shared_pool——解決ORA-4031錯誤
- XP系統出現記憶體讀寫錯誤解決方法記憶體
- jvm記憶體設定及記憶體溢位、解決方案JVM記憶體溢位
- 關於記憶體錯誤記憶體
- SQLServer因為OS虛擬記憶體不足而hang住異常解決-鎖定記憶體頁 (LPIM)SQLServer記憶體
- "KGH: NO ACCESS"記憶體分配過大,引起的ORA-4031故障記憶體
- Flume記憶體溢位錯誤記憶體溢位
- exp/imp出現錯誤通過expdp/impdp來解決
- Linux記憶體子系統——Locking Pages(記憶體鎖定)Linux記憶體
- 記憶體拷貝引起的錯誤記憶體
- eclispe 出現超記憶體錯誤Lisp記憶體
- 解決: gsrvr.exe錯誤,記憶體不能為讀,地圖白屏,I/O錯誤 問題。(轉載)VR記憶體地圖
- 記憶體混亂及解決方法和死鎖問題記憶體
- Java記憶體快取-通過Map定製簡單快取Java記憶體快取
- 通過 sysprocesses 解決Sql死鎖問題SQL
- JVM 記憶體模型 記憶體分配,JVM鎖JVM記憶體模型
- 實體記憶體過高怎麼辦 實體記憶體使用率高的解決方法記憶體
- 關於Allowed memory size of (PHP記憶體溢位)錯誤的可能原因及解決方案PHP記憶體溢位
- virtualbox 錯誤解決記錄
- 電腦出現該記憶體不能為written怎麼解決 快速修復錯誤提示記憶體不能為written的方法記憶體
- GoldenGate通過CACHEMGR限制記憶體利用Go記憶體
- 電腦記憶體佔用過高怎麼辦 電腦記憶體佔用過高解決方法記憶體
- 解決Windows下棧記憶體過小的問題Windows記憶體
- Java 記憶體洩露的理解與解決過程Java記憶體洩露
- 記一則伺服器記憶體洩漏解決過程伺服器記憶體
- 5個常見的JavaScript記憶體錯誤JavaScript記憶體
- Xamarin Android提示記憶體溢位錯誤Android記憶體溢位
- 9i出現記憶體分配錯誤記憶體
- 通過sql跟蹤解決ORA-00942錯誤一例SQL
- win10系統記憶體不足提示0xc0000017錯誤的解決方法Win10記憶體
- [譯] Swift:通過示例避免記憶體洩漏Swift記憶體
- 通過減少記憶體使用改善.NET效能記憶體
- 通過 HelloWorld 瞭解 Java 程式執行過程以及執行時記憶體Java記憶體
- postgresal使用錯誤解決 (記錄篇)
- eclipse中啟動專案報記憶體溢位問題通過修改配置解決Eclipse記憶體溢位
- 一個 ExpressionChangedAfterItHasBeenCheckedError 錯誤的解決過程ExpressError
- ORA-2049錯誤解決過程