问:Oracle进程的内存占用一直在不断增加,达到1G左右时就会出现连接失败,监听进程死掉,或者CPU达到100%的现象,请问应当如何来解决?
解答:Oracle性能调优一直是一个很有意思的命题,增强硬件配置是一种方法,但我们平时遇到的最多的问题是如何在没办法增强硬件配置的情况下,将数据库性能优化,这里将会给出一个详细的解决思路:
1、PATCH是否都打了,Oracle系统内存参数是否太大,超出OS的MEMORY。
2、查查是不是程序没有关闭连接导致连接数不断上升引起的,你是什么操作系统?
3、服务器都作了什么设置呢?比如sga的分配,是什么情况呢?
4、要进行调优,及参数设置。
启动“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的输入。