Heim > Datenbank > MySQL-Tutorial > Hauptteil

TNS-12500,TNS-12540,TNS-12560,TNS-00510解决过程

WBOY
Freigeben: 2016-06-07 17:53:33
Original
1339 Leute haben es durchsucht

一环境: 1平台:IBMAX360,4G内存windows2kadvServersp3+oracle816独占模式 2内存分配相关参数 ..processes................=.1000 ..shared_pool_size.........=.240000000 ..large_pool_size..........=.614400 ..java_pool_size...........=.32768 ..db_bl

一 环境: 
1 平台: IBM AX360,4G内存 windows 2k advServer sp3 + oracle 816 独占模式 

2 内存分配相关参数 
..processes................=.1000 
..shared_pool_size.........=.240000000 
..large_pool_size..........=.614400 
..java_pool_size...........=.32768 
..db_block_buffers.........=.90000 
..db_block_size............=.4096 
..log_buffer...............=.163840 
..log_checkpoint_interval..=.10000 
..sort_area_size...........=.65536 
..sort_area_retained_size..=.65536 
..open_cursors.............=.100 
..job_queue_processes......=.4 
..job_queue_interval.......=.10 
..max_dump_file_size.......=.10240 

3 最大并发用户数:850个左右 

二 故障现象: 
....当用户数达到一定的数量时(700多)客户端连接时报ora-12560错误,紧跟着报ora-03114错误,不能连接到。此时已连接到服务器的用户能正常访问。 
....首先查看警告日志文件,未见到明显错误信息。 
....查看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达到760多个。 
....重启oracle服务后,能连接新的用户数,但当并发用户数达到750个以上时,再次报同样的错误 

三 原因分析: 
....系统资源耗竭,意味着系统分配给oracle的内存用尽了。虽然我们有4G的物理内存,但正常情况下系统只能给oracle分配2G的内存,这2G的内存中,包括了SGA、PGA等oracle需要使用的全部内存。在独占模式下,每一个session将单独分配2M左右的内存。在本例中,SGA分配了约600M,按每一个用户分配2M内存计算,连接数达到750个时,总分配内存已达到2G,将不能再增加新的连接数。如果要解决这个问题,在不做大的调整的前提下,要么减小SGA大小,要么减小为每一个会话分配的内存大小,以能连接更多的用户。 

四 解决过程: 
....查阅了oracle文档,文档里提出来了几个解决的办法: 

1 重置init.ora参数文件,调小以下四个参数的值: 
....short_area_size 
....hash_area_size 
....bitmap_merge_area_size 
....create_bitmap_area_seze 
....open_cursone 

2 调小SGA的大小 

3 减小oracle Job队列数量(job_queue_processes)和并发队列数(parallel_max_servers) 

4 重置并减小会话/线程使用的堆栈大小 

5 将oracle改为mts模式 

6 更换操作系统为windows NT 企业版 

7 使用intel的ESMA硬件支持,即使用大内存 
..1) 在intel系统上使用 /3G 开关 
..2) 使用PSE36内存 
....结合本实例的具体情况,决定调整的主要目标为减小用户的PGA大小。 
....构成PGA的主要内容有short_area_size, hash_area_size, open_cursone, 以及oracle 堆栈和TNS 堆栈。在本实例中,排序区为64K,hash区为128K(缺少值),打开的游标数与应用有关,不能随便减小了,然而oracle堆栈和TNS堆栈都是1M,却有较大的减小的余地。因此,调整的目标定为减小这两个堆栈的大小。 
....使用orastack 命令来减小这两个堆栈的大小: 
D:\oracle\ora81\bin>orastack oracle.exe 500000 
Couldn’t open file with CreateFile() 
GetLastError() == 32 
....停止oracle服务和TNS服务,再运行以上命令 
D:\oracle\ora81\bin>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:\oracle\ora81\bin>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服务,打开数据库,用户连接到服务器,经测试,用户数到1350以上时数据库仍然运行正常,解决了本实例存在的问题。 

五 小结 
....事实上,正如oracle文档所指出的那样,要增加用户连接数的途径很多,除了减小用户堆栈之外,还可以减小SGA,或者是更改成MTS方式,或者是使用第三方工具增加oracle可用内存。本人前面小结过如何让oracle在32位的windows操作系统上使用超过2G内存的方法( http://www.itpub.net/showthread.php...15&pagenumber=1 ),在本安全应用中,宜将两者(减小用户堆栈与增加oracle可用内存)结合起来使用,以提高数据库性能。但是,这种方式下,同样不可能无限制地增加用户连接数。要想使用户连接数达到更大,则应使用MTS方式。
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!