【拖雷】一則ORA-12500錯誤的解決案例
環境:
OS:AIX 5.3
$oslevel -s
5300-06-04-0748
DB:Oracle 9206
我們的一臺生產環境,突然系統監測到大量的連線失敗,通過監聽的日誌,可以發現部分連線是成功的,部分連線是失敗的。如
成功的連線
14-APR-2008 21:08:31 * (connect_data=(service_name=feel)(server=dedicated)(CID=(PROGRAM=java)(HOST=shop48.cm2)(USER=admin))) * (ADDR
ESS=(PROTOCOL=tcp)(HOST=172.19.26.48)(PORT=49288)) * establish * feel * 0
失敗的連線
14-APR-2008 21:08:31 * (connect_data=(service_name=feel)(server=dedicated)(CID=(PROGRAM=java)(HOST=app131)(USER=admin))) * (ADDRESS=
(PROTOCOL=tcp)(HOST=192.168.60.131)(PORT=55076)) * establish * feel * 12500
TNS-12500: TNS:listener failed to start a dedicated server process
TNS-12540: TNS:internal limit restriction exceeded
TNS-12560: TNS:protocol adapter error
TNS-00510: Internal limit restriction exceeded
IBM/AIX RISC System/6000 Error: 12: Not enough space
失敗的連線反饋給前端的錯誤是Ora-12500錯誤,系統級別的錯誤是internal limit restriction exceeded,以及錯誤12:Not enough space。通常,AIX的錯誤12都是指記憶體不夠,但是這個系統的總記憶體是64G,還存在大量剩餘空間,交換空間的使用率也不超過2%。
開始以為是連線數與檔案控制程式碼的限制,但是修改了系統引數maxuproc(每使用者的最大程式限制)從2000到5000(系統當時實際使用的程式數小於1000個),使用者檔案控制程式碼限制ofiles(descriptors)從4000到5000,都沒有效果。
根據錯誤型別12,還是把問題定位在記憶體上面,檢視SGA大小,佔了45G,約系統總記憶體的70%,加上系統自身要消耗10%的記憶體,合計80%的記憶體,這部分記憶體是不能交換的,而OS的系統引數maxpin%正好預設是80%,修改maxpin%到90%,問題解決,所有的連線正常。
正常情況下,系統的記憶體分計算記憶體與非計算記憶體(如檔案系統cache),SGA與系統的這部分記憶體都屬於計算記憶體,在AIX的早期版本(如Aix 5.2),如果記憶體不夠,這部分記憶體是可以交換的,但是後期的版本,如Aix 5.3以後,因為large page的引進,這部分記憶體是長駐記憶體而不能交換的(不知道是進步還是退步)。所以,當這部分記憶體達到maxpin%的時候,就會發生記憶體不夠,如果超出,就會發生系統hang住,所有的連線都無法進入,我們的這個實際案例是幸運的,只是在臨界點附近顛簸,並沒有引起系統的癱瘓。
修改maxpin%是一個解決方法,但同時也要注意maxperm%,maxclient%與minperm%的正確設定,以及其它記憶體的使用,因為除了系統以及SGA之外,還有程式空間(程式使用記憶體,有一部分是可交換的,有一部分也是屬於系統級別,不可交換的),以及檔案系統Cache,設定lru_file_repage=0,可以保證在minperm%之上,優先交換非計算記憶體。
至於剛上線的時候是正常的,為什麼執行一段時間以後才不正常,可能是因為連線數的增加,導致系統消耗以及記憶體增加,慢慢的達到了臨界點。
--EOF--
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1384/viewspace-237977/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 案例: 解決ORACLE ORA-27211的錯誤Oracle
- mysql innobackupex 的一則錯誤MySql
- ORA-00230 錯誤解決案例
- 資料庫壞塊解決案例一則資料庫
- 【MySQL】錯誤資訊寫入slave_relay_log.index 案例一則MySqlIndex
- 一個 ExpressionChangedAfterItHasBeenCheckedError 錯誤的解決過程ExpressError
- samba一個錯誤的解決辦法!Samba
- 複製錯誤案例分享(一)
- Ocelot錯誤解決
- SVN 遇到的一些錯誤解決方案
- Oracle修改主機名問題解決案例一則Oracle
- 執行impdp時出現ORA-39154錯誤的解決案例
- 安裝wsl錯誤的一種解決辦法
- ORA-04031 故障解決案例詳細分析一則
- undefined reference to錯誤的解決方法Undefined
- SAXParseException的錯誤解決之二Exception
- PHP錯誤“Thisfilehasexpired”的解決方法PHP
- VIM 常用錯誤解決
- sqldeveloper for windows 錯誤解決SQLDeveloperWindows
- set autotrace on時報SP2-0618錯誤的問題解決案例
- ORA-00119,ORA-00132錯誤解決案例
- dns錯誤怎麼辦 dns錯誤的解決辦法DNS
- ruby2.2安裝錯誤一則
- 關於”kccrsz“錯誤處理一則
- vsftpd 錯誤:530 and 500 錯誤解決方法FTP
- 網頁上有錯誤怎麼辦 網頁錯誤的一般解決辦法網頁
- 解決MySQL server has gone away錯誤的解決方案MySqlServerGo
- Qt報Multiple definition錯誤的解決QT
- Cocopods的升級錯誤解決
- 解決 ngrok 的 Domain 錯誤問題AI
- 錯誤Namenodeisinsafemode的解決方法
- 解決DBCA的ORA-32700錯誤
- 【MySQL】解決mysql的 1594 錯誤MySql
- latex 錯誤以及解決方案
- ora-27504錯誤解決
- Datastore error in 'dirbdb'錯誤解決ASTError
- ORA-27054 錯誤解決
- mysql與php錯誤解決MySqlPHP