Oracle 10g 最大可分配内存数问题,请数据库高手给予解答,详细问题见下:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 10g 最大可分配内存数问题,请数据库高手给予解答,详细问题见下:相关的知识,希望对你有一定的参考价值。

我们医院的 HIS 采用 Oracle 10g 32位进行管理,操作系统为 32位 Windows Server 2003 标准版;近期出现连接数一多TNS就无响应的问题(已经连接的用户可以正常使用程序,只是拒绝新连接的用户),按照网上的说法增加了并发连接数,上调到 1000 ,死锁的情况有所改善,但是遇到极端情况仍然会死,后来使用 VB 写了一个测试程序在自己的计算机上测试,发现即使把并发连接数调到1000,也只能建立400个左右的连接!超过这个数目程序就会无响应,与我们单位的情况类似。

在网上搜索还发现一种观点:说是 Oracle10g 32位版本只能使用 1.5G 左右的物理内存,超过这个值就会拒绝连接,与并发连接数设置值无关,我想堂堂 Oracle 不会出现这样的限制吧??总该有个解决办法,突然想到了 Win2003 有个 PAE 参数,可以使得 2003 识别 4G 以上的物理内存,不知道这个参数对 Oracle 是不是会有用呢???

我们单位现在极端情况是连接数 500+ ,当然只是极少数情况会达到这个阈值,但是老是死机也蛮烦的,数据库菜鸟诚心希望高手指点一下,我该怎么办??????
这边的程序已经做好了,要换 64 位系统的话,什么 Rose双机、数据环境 统统都得重新装,由于医院的特殊性,业务是一定不能停的,重装很麻烦! 有没有什么办法使32位的 Oracle 突破500个连接呢?? 500个绝对够用了......

没错的,32位oracle确实只能用1.5G 的内存(实际是将近1.7G),即便你让操作系统认到更多的内存,oracle也没有办法去使用。但是据说可以通过强制改参数的办法,让32位oracle突破1.5G的内存限制,但是极其不稳定。我曾经按照传说的方法试图突破限制,但没有成功。后来就换了64位的环境。
如果性能不满足,从可靠性、稳定性的角度出发,强烈建议你换成64位环境,即64位的操作系统+64位的oracle。
没错,系统升级、迁移过程是避免不了的。如果实在不想干,那么适度扩大pga的容量吧,当然,对应的很可能是sga的缩小,从而造成性能下降,这是oracle性能调优的过程。追问

那么再请不吝赐教,这两个参数应该有一定规矩的吧,要遵循怎样的准绳呢??

追答

没有一定之规,都要根据系统实际情况进行调整的。

参考技术A 换64位版本的oracle 10g是一劳永逸的做法, 通过RMAN备份, 再导入, 没有你想像的那么麻烦, 如果不愿意这么做的话, 那么就只能从内存上解决了.
1. 修改操作系统能识别的内存, 在win7下, 可以通过 bcdedit /set IncreaseUserVa 3072 命令, 使系统识别单个程序的内存达到 3G
2. 修改oracle参数, memory_target, sga_max_size 都设置为3072M追问

那服务器用的是 server2003 standard Edition ,不支持物理内存扩展(/PAE),我家的系统是 Server2003 Enterprise Edition 照理说应该支持 /PAE ,8GB 内存也够用,但是在这个系统上测试,SGA_Max_size 调到大于 2G ,结果 TNS 起不来了,试过貌似最大 1.7 G,也就是说所谓的“物理地址扩展”并没有让 Oracle 识别出 2GB 以上的内存,而仅仅是让 Windows 本身认出了更多的内存,不知道这样理解对否......

追答

memory_target 也要同时调整才行, 否则数据库是起不来的, 想要扩大oracle内存
1. 操作系统要允许单个进程用到那么多内存
2. oracle自身扩大到那么大的内存

本回答被提问者采纳
参考技术B 来算算,500个connect,每个起码要2m内存,数据库也要2m,就是4m,也就是2000m,将近2g,32位windowxp不能超过1.7g, 几乎是不可能的,所以500+的sessions,几乎是不可能的。所以,用中间件吧,或用shared server模式,减少对内存的使用,不要用dedicated了 参考技术C 你就按照上面那个,在控制台上输入dbca就可以创建了,这个工具可以创建数据仓库和数据库,但是要注意的是在oracle中创建数据库和sqlserver差别是非常大的,在oracle中创建数据库会对系统性能有非常大的影响,所以不要随便就在oralce上创建数据库。。 参考技术D 增加个应用服务器

关于Oracle内存分配-解决实际运行时最大Session数不一致远小于系统配置最大的Session数目

一、相关的技术准备

  1. 关于内存的介绍:https://blog.csdn.net/u013641333/article/details/82732526

  2. PGA_AGGREGATE_TARGET -此参数用来指定所有session总计可以使用最大PGA内存。这个参数可以被动态的更改,取值范围从10M -- (4096G-1 )bytes。

https://blog.csdn.net/shuaiyu133/article/details/7369001

  3.关于自动分配内存

https://blog.csdn.net/fjseryi/article/details/50818843

  4.PGA的介绍

  https://www.iteye.com/blog/wallimn-2250795

 

以上是关于Oracle 10g 最大可分配内存数问题,请数据库高手给予解答,详细问题见下:的主要内容,如果未能解决你的问题,请参考以下文章

oracle 连接数 最大可以设置多少

关于Oracle内存分配-解决实际运行时最大Session数不一致远小于系统配置最大的Session数目

Oracle 参数文件

win11自动分配10g虚拟内存

oracle11g和oracle10g的区别

Oracle 10g实现存储过程异步调用