TNS-12500解決過程(zt)
摘自:YCXW的博克
[@more@]原文地址: http://blog.csdn.net/ycxw/archive/2004/12/20/223324.aspx
一 環境:
1 平臺: HP,2G記憶體 windows 2k advServer sp3 + oracle 817 獨佔模式
2 記憶體分配相關引數
..processes................=.350
..shared_pool_size.........=.314572800
..large_pool_size..........=.614400
..java_pool_size...........=.0
..db_block_buffers.........=.67372
..db_block_size............=.16384
..log_buffer...............=.163840
..log_checkpoint_interval..=.10000
..sort_area_size...........=.52428800
..sort_area_retained_size..=.52428800
..open_cursors.............=.300
..job_queue_processes......=.4
..job_queue_interval.......=.10
..max_dump_file_size.......=.10240
3 最大併發使用者數:100個左右
二 故障現象:
....當使用者數達到一定的數量時(30多)客戶端連線伺服器時報TNS-12500錯誤,此時已連線到伺服器的使用者能正常訪問資料庫。
....首先檢視警告日誌檔案,未見到明顯錯誤資訊。
....檢視listner.log檔案,發現如下資訊(很多個類似的錯誤記錄,摘兩個上來)
.........................
02-JUL-2003 10:30:09 * (CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=***.EXE)(HOST=*******)(USER=*****))) * (ADDRESS=(PROTOCOL=tcp)(HOST=*******)(PORT=1136)) * establish * ORCL * 12500
TNS-12500: TNS:listener failed to start a dedicated server process
.TNS-12540: TNS:internal limit restriction exceeded
..TNS-12560: TNSrotocol adapter error
...TNS-00510: Internal limit restriction exceeded
....32-bit Windows Error: 8: Exec format error
02-JUL-2003 10:30:10 * (CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=***.EXE)(HOST=*****)(USER=***))) * (ADDRESS=(PROTOCOL=tcp)(HOST=******)(PORT=1203)) * establish * ORCL * 12500
TNS-12500: TNS:listener failed to start a dedicated server process
.TNS-12540: TNS:internal limit restriction exceeded
..TNS-12560: TNSrotocol adapter error
...TNS-00510: Internal limit restriction exceeded
....32-bit Windows Error: 8: Exec format error
.....................
此時,原來已連線上伺服器的使用者還能正常使用。檢視此時session達到50多個。
....重啟oracle服務後,能連線新的使用者數,但當併發使用者數達到15個以上時,再次報同樣的錯誤
三 原因分析:
....系統資源耗竭,意味著系統分配給oracle的記憶體用盡了。雖然我們有2G的實體記憶體,但正常情況下系統只能給oracle分配1.3G的記憶體,這1.3G的記憶體中,包括了SGA、PGA等oracle需要使用的全部記憶體。在獨佔模式下,每一個使用者將單獨分配50M(Sort_area_size)左右的記憶體。在本例中,UGA分配了約2G,按每一個使用者分配50M記憶體計算,連線數達到15個時,總分配記憶體已達到2G,將不能再增加新的連線數。如果要解決這個問題,在不做大的調整的前提下,要麼減小SGA大小,要麼減小為每一個會話分配的記憶體大小,以能連線更多的使用者。
四 解決過程:
....查閱了oracle文件,文件裡提出來了幾個解決的辦法:
1 重置init.ora引數檔案,調小以下四個引數的值:
....sort_area_size
....hash_area_size
....bitmap_merge_area_size
....create_bitmap_area_seze
....open_cursone
2 減小oracle Job佇列數量(job_queue_processes)和併發佇列數(parallel_max_servers)
3 重置並減小會話/執行緒使用的堆疊大小
4 將oracle改為mts模式
....結合本例項的具體情況,決定調整的主要目標為減小使用者的PGA大小。
....構成PGA的主要內容有sort_area_size, hash_area_size, open_cursor, 以及oracle 堆疊和TNS 堆疊。在本例項中,排序區為64K,hash區為128K(缺少值),開啟的遊標數與應用有關,不能隨便減小了,然而oracle堆疊和TNS堆疊都是1M,卻有較大的減小的餘地。因此,調整的目標定為減小這兩個堆疊的大小。
....使用orastack 命令來減小這兩個堆疊的大小:
D:oracleora81bin>orastack oracle.exe 500000
Couldn't open file with CreateFile()
GetLastError() == 32
....停止oracle服務和TNS服務,再執行以上命令
D:oracleora81bin>orastack oracle.exe 500000
Dump of file oracle.exe
Current Reserved Memory per Thread = 1048576
Current Committed Memory per Thread = 4096
New Reserved Memory per Thread = 500000
D:oracleora81bin>orastack tnslsnr.exe 500000
Dump of file tnslsnr.exe
Current Reserved Memory per Thread = 1048576
Current Committed Memory per Thread = 4096
New Reserved Memory per Thread = 500000
重新啟動oracle服務和TNS服務,開啟資料庫,使用者連線到伺服器,經測試,使用者數到50以上時資料庫仍然執行正常,解決了本例項存在的問題。
五 小結
....事實上,正如oracle文件所指出的那樣,要增加使用者連線數的途徑很多,除了減小使用者堆疊之外,還可以減小SGA,或者是更改成MTS方式,或者是使用第三方工具增加oracle可用記憶體。在本安全應用中,宜將兩者(減小使用者堆疊與增加oracle可用記憶體)結合起來使用,以提高資料庫效能。但是,這種方式下,同樣不可能無限制地增加使用者連線數。要想使使用者連線數達到更大,則應使用MTS方式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/166555/viewspace-790600/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle儲存過程編譯死掉的原因及解決(zt)Oracle儲存過程編譯
- crontab失敗的解決過程
- Index online operation的過程 ztIndex
- 用flashback恢復儲存過程(ZT)儲存過程
- 詳解:RHEL5下實現本地YUM源的過程(zt)
- 一個lua問題解決過程
- ORA-01461解決過程
- [Q]怎麼樣加密儲存過程 zt加密儲存過程
- 一個 ExpressionChangedAfterItHasBeenCheckedError 錯誤的解決過程ExpressError
- ORA-2049錯誤解決過程
- ORA-01461的解決過程~~
- ora-01536的解決過程
- munium學習過程中問題解決
- [zt]Logical standby同步故障的處理過程
- 如何捕獲問題SQL解決過度CPU消耗問題 (zt)SQL
- 記錄一個前端bug的解決過程前端
- Oracle 編譯儲存過程卡死解決方法Oracle編譯儲存過程
- 分享:MySQL資料庫崩潰解決過程MySql資料庫
- 【故障診斷】cr塊slot notfound解決過程
- 安裝sysbench過程報錯,解決辦法
- enq: HW - contention診斷及解決過程ENQ
- oracle儲存過程!解決網友問題Oracle儲存過程
- Data Pump Import速度問題之解決過程Import
- httpd使用systemctl啟動超時解決過程httpd
- 更改主機名稱或ip 導致 Oracle10G Web OEM不能正常啟動的解決過程(zt)OracleWeb
- Oracle10g RAC for Linux配置全過程(zt)OracleLinux
- hanganalyze解決row cache lock(ZT)
- 儲存過程效能低的解決方法之一儲存過程
- 一次線上問題的排查解決過程
- 一次sqlldr匯入慢的解決過程SQL
- 伺服器硬碟掉了兩塊的解決過程伺服器硬碟
- Oracle儲存過程編譯卡死的解決方法Oracle儲存過程編譯
- DataGuard之switchover_status狀態not allowed解決過程
- ORA-600(17069)錯誤的解決過程
- MapReduce過程詳解
- 表碎片起因及解決辦法(zt)
- 丟失所有redo log,解決如下zt
- (zt)工薪階層理財解決方案