Oracle优化

Oracle内存分配经验法则

时间:2013-10-25 10:47:02  作者:www.solgle.com  来源:说歌社区  查看:444  评论:0
内容摘要:在一个专用的服务器上,一般可将80%的内存分配给Oracle,而剩余20%的内存留给操作系统。2. 对于OLTP系统,一般将80%的Oracle内存分配给SGA,20%分配给PGA;对于OLAP系统,一般将50%的Oracle内存分配给SGA,50%分配给PGA。3. bu...

1. 在一个专用的服务器上,一般可将80%的内存分配给Oracle,而剩余20%的内存留给操作系统。
2. 对于OLTP系统,一般将80%的Oracle内存分配给SGA,20%分配给PGA;对于OLAP系统,一般将50%的Oracle内存分配给SGA,50%分配给PGA。
3. buffer cache的大小: db_cache_size=sga_target*80%;
4. shard pool 的大小:shared_pool_size为sga_target的10%到15%;
5. log buffer一般设置4M即可,千万不要太大

三、oracle 内存调优办法
当项目的生产环境出现性能问题,我们如何通过判断那些参数需要调整呢?
3.1 检查ORACLE实例的Library Cache命中率:
        标准:一般是大于99%
        检查方式:select 1-(sum(reloads)/sum(pins)) "Library cache Hit Ratio" from v$librarycache;
        处理措施:
        如果Library cache Hit Ratio的值低于99%,应调高shared_pool_size的大小。通过sqlplus连接数据库执行如下命令,调整shared_pool_size的大小:
        SQL>alter system flush shared_pool;
        SQL>alter system set shared_pool_size=设定值 scope=spfile;
3.2 检查ORACLE实例的Data Buffer(数据缓冲区)命中率:
        标准:一般是大于90%
        检查方式:
        select 1 - (phy.value / (cur.value + con.value)) "HIT RATIO"
         from v$sysstat cur, v$sysstat con, v$sysstat phy
       where cur.name = 'db block gets'
           and con.name = 'consistent gets'
           and phy.name = 'physical reads';
        处理措施:
        如果HIT RATIO的值低于90%,应调高db_cache_size的大小。通过sqlplus连接数据库执行如下命令,
        调整db_cache_size的大小
        SQL>alter system set db_cache_size=设定值 scope=spfile
3.3 检查ORACLE实例的Dictionary Cache命中率:
        标准:一般是大于95
        检查方式:
        select 1 - (sum(getmisses) / sum(gets)) "Data Dictionary Hit Ratio"
         from v$rowcache;
        处理措施:
        如果Data Dictionary Hit Ratio的值低于95%,应调高shared_pool_size的大小。通过sqlplus连接数据库执行如下命令,调整shared_pool_size的大小:
        SQL>alter system flush shared_pool;
        SQL>alter system set shared_pool_size=设定值 scope=spfile;
3.4  检查ORACLE实例的Log Buffer命中率:
        标准:一般是小于1%
        检查方式:
        select (req.value * 5000) / entries.value "Ratio"
          from v$sysstat req, v$sysstat entries
        where req.name = 'redo log space requests'
           and entries.name = 'redo entries';
        处理措施:
        如果Ratio高于1%,应调高log_buffer的大小。通过sqlplus连接数据库执行如下命令,调整log_buffer的大小:
        SQL>alter system set log_buffer=设定值 scope=spfile;
3.5 检查undo_retention:
        标准:undo_retention 的值必须大于max(maxquerylen)的值
        检查方式:
        col undo_retention format a30
        select value "undo_retention" from v$parameter where name='undo_retention';
        select max(maxquerylen) From v$undostat Where begin_time>sysdate-(1/4);
        处理措施:
        如果不满足要求,需要调高undo_retention 的值。通过sqlplus 连接数据库执行如下命
        令,调整undo_retention 的大小:
        SQL>alter system set undo_retention= 设定值 scope=spfile;
注:32bit  和 64bit  的问题
       对于 oracle 来说,存在着 32bit 与 64bit 的问题。这个问题影响到的主要是 SGA 的大小。在 32bit 的数据库下,通常 oracle 只能使用不超过 1.7G 的内存,即使我们拥有 12G 的内存,但是我们却只能使用 1.7G,这是一个莫大的遗憾。假如我们安装 64bit 的数据库,我们就可以使用很大的内存,我们几乎不可能达到上限。但是 64bit 的数据库必须安装在 64bit 的操作系统上,可惜目前 windows 上只能安装 32bit 的数据库,我们通过下面的方式可以查看数据库是 32bit 还是 64bit
    但是在特定的操作系统下,可能提供了一定的手段,使得我们可以使用超过 1.7G 的内存,达到 2G 以上甚至更多


标签:Oracle内存分配经验法则 

solgle.com 版权所有,欢迎分享!!!

相关文章
    相关评论
       Copyright © 2013-2020 solgle.com,All rights reserved.[solgle.com] 公安机关备案号:51010802000219
    Email:solgle@solgle.com; weixin:cd1008610000 ICP:蜀ICP备14011070号-1