Oracle的内存配置与Oracle性能息息相关。从总体上讲,可以分为两大块:共享部分(主要是SGA)和进程独享部分(主要是PGA)。在 32 位操作系统下 的Oracle版本,不时有项目反馈关于内存的错误(如ORA-04030、04031错误)都是十分令人头疼的问题。查阅资料了解到,ORA-04030的问题一般是PGA过度分配造成的(对应的操作是sort/hash_join)。在Oracle中pga_aggregate_target指定了所有session总共使用的最大PGA上限。经测试验证,32位Oracle版本使用的物理内存保持在 1.6G以下为佳(SGA+PGA),超过 1.7G左右系统开始不稳定,推荐的内存配置为:SGA=1200M,PGA=360M;

调整内存参数的命令示例如下:

alter system set sga_max_size=1200M scope=spfile;
alter system set sga_target=1200M scope=spfile;
alter system set pga_aggregate_target=360M scope=spfile;

附,调整sharepool、buffer cache

-- 设置内存自动调整
alter system set memory_max_target=48G scope=spfile;
alter system set memory_target=48G scope=spfile;
alter system set sga_target=0 scope=spfile;
alter system set pga_aggregate_target=0 scope=spfile; -- 设置buffer cache和shared pool的值(在自动内存管理的情况下,这个值会作为最小值),解决shared pool过大和SGA Resizing引发的性能问题
alter system set sga_max_size=36G scope=spfile;
alter system set sga_target=36G scope=both;
alter system set pga_aggregate_target=12G scope=spfile;
alter system set db_cache_size=25G scope=both;
alter system set shared_pool_size=5G scope=both;
alter system set "_memory_broker_stat_interval"=900 scope=both; -- 设置resize的频率不低于15分钟
-- 保留的共享池空间与游标共享 ??
alter system set shared_pool_reserved_size=500M scope=both; --缺省值为shared_pool_size的5%,可以改为10~20%
alter system set cursor_sharing='SIMILAR'; -- 共享游标(EXACT/SIMILAR/FORCE),缺省为EXACT
 
-- 设置日志缓冲等 ?? 
alter system set log_buffer=134217728 scope=spfile; --128M ???
alter system set db_cache_size=25G scope=both sid='*'; --RAC
alter system set lock_sga=true scope=spfile; -- 锁定内存

Oracle支持自动和手工混合的内存参数管理方式,如果同时设置了Memory_target、SGA_target、db_cache_size,Oracle的处理方式是每个部件不会低于指定的内存大小,但可以根据需要调整到超过指定值的内存。这种自动和传统手工管理相结合的方式,更能适应复杂多变的系统需求。

       完全使用SGA自动管理有一个缺陷就是,如果应用系统绑定变量做得不好,或者由于BUG,child cursor过多,导致shared pool会变得很大,甚至超过10G,严重的比buffer cache还大,另一方面,在buffer cache和shared pool之间频繁地调整大小,可能会导致严重的解析问题和其他性能问题。针对这个问题,通常有2种解决办法:一种就是关闭SGA自动管理,即将SGA_TARGET设置为0,以9i的方式来设置shared_pool_size,db_cache_size这些参数,来手动管理SGA;第二种就是sga_target仍然大于0,即自动管理SGA,但是通过设置shared_pool_size,db_cache_size等参数限制这些内存组件的最小大小,而只留给系统极少的自动调整空间。 

建议使用的Oracle版本:10.2.0.5、11.2.0.3/4;对于64位版本,建议先把20%的内存留给操作系统,剩余80%分配给Oracle(其中SGA=物理内存*80%*80%,PGA=物理内存*80%*20%,db_cache_size=SGA*80%,shared_pool_size=SGA*15%)。

曾经在多个项目上发现过奇怪的现象,一个较复杂的SQL,直接执行或查看执行计划,操作系统中可以看到CPU立刻飙到99%,而且即使等待很长时间(比如2分钟,对于一个各表数据量小于10K的查询,哪怕都走全表扫描也应该执行完的,2分钟实在是太久了),CPU也不会降下来,SQL命令也无法正常结束,只能强制终止该会话或Oracle进程。该SQL访问的所有表的数据量都不是很大(小于10K),更新统计信息等都没有效果。我分别在Windows和Linux平台下的测试环境验证过,问题都能够重现,当然如果将SQL脚本简化也能解决,但没有明显的规律、规则,感觉应该是Oracle的bug,最后都是通过升级到最新版本解决的。

如分页SQL脚本(MV_118_CTLIST_03为视图):

SELECT MV_118_CTLIST_03."CTLIST_Name"
, MV_118_CTLIST_03."CTLIST_Depart_LSBMZD_BMMC"
, MV_118_CTLIST_03."CTLIST_Value"
, MV_118_CTLIST_03."CTLIST_Handler_LSZGZD_ZGXM"
, QRY_WORKITEM.STARTEDDATE
, QRY_WORKITEM.COMPLETEDDATE
, QRY_WORKITEM.PROCESSINSTANCEID
, QRY_WORKITEM.ACTIVITYDEFINITIONID
, QRY_WORKITEM.PROCESSDEFINITIONID
, QRY_WORKITEM.ActivityInstanceId
, QRY_WORKITEM.WORKITEMID
, QRY_WORKITEM.WORKTYPE
FROM QRY_WORKITEM
JOIN MV_118_CTLIST_03 ON ROOTPROCINSTID = MV_118_CTLIST_03."CTLIST_SPID"
JOIN (SELECT PK
FROM (SELECT PK, rownum rowNumber
FROM (SELECT WORKITEMID AS PK
FROM QRY_WORKITEM
JOIN MV_118_CTLIST_03 ON ROOTPROCINSTID = MV_118_CTLIST_03."CTLIST_SPID"
WHERE QRY_WORKITEM.Participant = '5b181b7c-8ea8-45a5-b35d-a90aed0725dc'
AND QRY_WORKITEM.State = ''
AND QRY_WORKITEM.BIZPROCID = '0fad699e-a787-4fb6-bbff-8d3382f6d37f'
ORDER BY STARTEDDATE)
WHERE rownum <= 20)
WHERE rowNumber >= 1) tblPK ON workitemid = tblPK.PK
WHERE QRY_WORKITEM.Participant = '5b181b7c-8ea8-45a5-b35d-a90aed0725dc'
AND QRY_WORKITEM.State = ''
AND QRY_WORKITEM.BIZPROCID = '0fad699e-a787-4fb6-bbff-8d3382f6d37f'
ORDER BY STARTEDDATE
 

Oracle内存参数配置及版本问题的更多相关文章

  1. JAVA JVM常见内存参数配置简析

    JVM常见内存参数配置简析   常见参数 -Xms .-Xmx.-XX:newSize.-XX:MaxnewSize.-Xmn(-XX:newSize.-XX:MaxnewSize) 简析 1.-Xm ...

  2. Oracle 内存参数调优设置

    Oracle 数据库系统中起到调节作用的参数叫初始化参数,数据库管理员根据实际情况需要适当调整这些 初始化参数以优化Oracle系统. 1 主要系统参数调优介绍 2 系统内存参数的分配 2.1 Ora ...

  3. Oracle系统结构之修改oracle内存参数

    Linux主机16g内存,修改oracle数据库内存参数: 1.编辑/etc/fstab文件:针对tmpfs行将defaults改成defaults,size=12g(千万注意格式,不能出现错误) 修 ...

  4. MySQL性能优化-内存参数配置

    Mysql对于内存的使用,可以分为两类,一类是我们无法通过配置参数来配置的,如Mysql服务器运行.解析.查询以及内部管理所消耗的内存:另一类如缓冲池所用的内存等. Mysql内存参数的配置及重要,设 ...

  5. weblogic端口号修改和内存参数配置

    1 端口号修改 如图 是详细路径 注:我用的weblogic版本是10.3 当刚创建完域的时候这个配置文件下没有Listen-port参数  第一次去控制台修改端口后就这个参数了

  6. [jvm] -- 常用内存参数配置篇

    新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ) Eden : from : to = 8 : 1 : 1 ( 可 ...

  7. jvm内存参数配置

    qunar国内旗舰店master  (4核 8G) qunar国内旗舰店hub(4核 8G) qunar国内旗舰店provider(4核 8G)

  8. Weblogic内存溢出及常用参数配置

        http://www.360doc.com/content/14/0306/14/16134804_358216319.shtml 一.WebLogic内存溢出 最近访问量门户访问量突然增大, ...

  9. MySQL性能的五大配置参数(内存参数)

    内存参数: 存储引擎/共享日志缓冲区,缓冲区池 innodb_buffer_pool_sizeinnodb_additional_mem_pool_sizeinnodb_log_buffer_size ...

随机推荐

  1. 【转发】构建高可伸缩性的WEB交互式系统(上)

    原文转自:http://kb.cnblogs.com/page/503460/ 可伸缩性是一种对软件系统处理能力的设计指标,高可伸缩性代表一种弹性,在系统扩展过程中,能够保证旺盛的生命力,通过很少的改 ...

  2. 使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境

    做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框 ...

  3. ZPPR016-在制品清单报表

    *&---------------------------------------------------------------------**& Report ZPPR016*&a ...

  4. ZOJ 1202 Divide and Count

    原题链接 题目大意:某人手上有一大批钻石,他同时有一些盒子恰好放下这些钻石,每个盒子可以放一个或多个,问一共有几种方法. 解法:这其实是一道排列与组合计算题,主要是写出组合算法的代码,把计算公式转为程 ...

  5. javabean实现serializable有什么用?为什么数据库持久就Bean实现这个接口?

    Java的"对象序列化"能让你将一个实现了Serializable接口的对象转换成一组byte,这样日后要用这个对象时候,你就能把这些byte数据恢复出来,并据此重新构建那个对象了 ...

  6. AndrdoidStudio 2个jar包引起的异常Duplicate files copied in APK META-INF/LICENSE.txt

    在build.gradle中与compileSdkVersion **.buildToolsVersion “**.**.*"或defaultConfig 同级添加如下代码 packagin ...

  7. HDU 1231 最大连续子序列 --- 入门DP

    HDU 1231 题目大意以及解题思路见: HDU 1003题解,此题和HDU 1003只是记录的信息不同,处理完全相同. /* HDU 1231 最大连续子序列 --- 入门DP */ #inclu ...

  8. HDU-1520 Anniversary party(树形DP)

    题目大意:一棵树,每个节点都带权.从中取出一些节点,并且子节点不能与父节点同时取,求能取得的最大值. 题目分析:定义状态dp(u,0/1)表示u点不取/取.则状态转移方程为: dp(u,1)=sum( ...

  9. IOS中调用系统的电话、短信、邮件、浏览功能

    iOS开发系列--通讯录.蓝牙.内购.GameCenter.iCloud.Passbook系统服务开发汇总 2015-01-13 09:16 by KenshinCui, 26990 阅读, 35 评 ...

  10. 【NOIP2008】双栈排序

    感觉看了题解还是挺简单的,不知道当年chty同学为什么被卡了呢么久--所以说我还是看题解了 原题: Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将 ...