日期:2014-05-17  浏览次数:21019 次

oracle进程内存占用一直增加,达到1G左右的时候就会连接失败,监听进程死掉,或者CPU达到100%,如何解决?
我怀疑是程序,什么资源没释放,操作多了,内存就会越来越多,到最后就会到极限,有可能是什么资源占用导致的呢?如果是SQL语句写的有问题,我该如何查找呢?有什么工具和方法吗?

------解决方案--------------------
之前看到过一个专业的分析的工具,忘记什么名字了。
sql有问题的话,你可以查看你的系统的日志,会知道一些原因。

Oracle也可以给自己可以利用的资源做出利用策略,但是所有的操作,都是有日志的。

从你说的情况来看,
可能有很多很长时间占用数据库的操作,或者打开的连接一直没有关系。

服务器都作了什么设置呢?比如sga的分配,是什么情况呢?

可以去OEM上面看看,目前数据库的瓶颈在什么地方。里面有一些可以利用的消息。
看问题在什么地方,决定做什么吧。
------解决方案--------------------
要进行调优,及参数设置.

启动“Enterprise Management Console”,以SYS/**** as SYSDBA身份进入系统。
ORACLE9i调优只涉及如下几个参数:
a) processes = 2000;
b) open_links = 100;
c)open_cursors = 30000;
d)sessions=2500;
e) parallel_automatic_tuning=true
f) undo_retention=3600
g) undo_management=AUTO
请确保在“SPFILE”中保存.在Oracle9i缺省的启动参数是spfile.不要用pfile文件启动数据库.


物理内存大于2.5G以上的通用设置:
启动“Enterprise Management Console”,以SYS/**** as SYSDBA身份进入系统。
配置SGA和PGA大小方法如下:

物理内存大于2.5G以上的通用设置
中文名 参数名 参数值 设置方法
SGA的最大大小 Sga_max_size 1200M 例程>配置>内存项卡
日志缓冲区 Log_buffer 3145728 例程>配置>一般信息选项卡>所有初始化参数
大型池 Large_pool_size 24M 例程>配置>内存项卡
Java池 Java_pool_size 20M 例程>配置>一般信息选项卡>所有初始化参数
共享池 Shared_pool_size 96M 例程>配置>内存项卡
数据缓冲区高速缓存 Db_cache_size 800M 例程>配置>内存项卡
Keep池 Db_keep_cache_size 224M 例程>配置>一般信息选项卡>所有初始化参数
Pga自动管理 workarea_size_policy AUTO 例程>配置>一般信息选项卡>所有初始化参数
总计pga目标 pga_aggregate_target 500M 例程>配置>内存项卡

说明:
1. 此内存设置不包含在数据库服务器上的其它应用程序的物理内存的大小.如果有其它的应用程序,可以参照下面的计算: sga_max_size+ pga_aggregate_target+应用程序物理内存+OS物理内存 <= 系统物理内存*75%.如果服务器上只有Oracle服务器,在2.5G以上物理内存的服务器上Oracle内存参数都可以参照上面的设置.如果服务器上有其它的应用,而服务器总的物理内存大于2.5,请自己计算后再选择的方案.
2. sga_max_size+ pga_aggregate_target <=1.7G,在32bit操作系统上有这个限制.
3. Log_buffer的大小为3M.但是在设置的时候必须输入换算后的3145728. 其他的参数支持M的输入.