1,内存结构优化概述
1.1 缓冲区
影响数据库运行性能的缓冲区包括可以共享的SGA和服务器进程私有的pga两大类,其中sga又包括共享池、大型池、java池、数据缓冲区、流池、redo log缓冲区。1.2 自动内存管理
Oracle一般采用自动内存管理来管理系统内存,由oracle自动管理和调整数据库实例的内存大小。在自动管理模式下,首先对初始化参数MEMORY_TARGET(目标内存大小)和MEMORY_MAX_TARGET(最大内存大小)进行配置,数据库调整目标内存大小,根据需要不断重新调整sga和pga的缓冲区大小。1.3 共享内存sga的自动管理
如果数据库实例启动时候动态将初始化参数SGA_TARGET设置为0,则自动共享内存管理被禁止使用。每个缓冲区的大小由初始化参数文件中的相应参数来决定。如果有必要,可以通过手动设置初始化参数DB_CACHE_SIZE,SHARED_POOL_SIZE,LARGE_POOL_SIZE,JAVA_POOL_SIZE,STREAMS_POOL_SIZE,来调整共享内存区各个缓冲区的大小。一般通常有一些内存组件大小需要管理员手动设置,不受自动内存管理的影响,比如重做日志缓冲区;KEEP、RECYCLE以及基于非标准数据块的缓冲区;固定的SGA和其他内部分配的内存区。手动调整这些内存区时候,需要设置的初始化参数有DB_KEEP_CACHE_SIZE,DB_RECYCLE_CACHE_SIZE,DB_nK_CACHE_SIZE,LOG_BUFFER,这些内存区的分配都是从SGA_TARGET指定内存中获取,SGA_TARGET的余下部分供自动共享内存管理的各个缓冲区使用。1.4 动态改变缓冲区大小
如果系统没有采用自动内存管理或者自动内存共享内存管理功能,可以使用ALTER SYSTEM语句配置初始化参数DB_ACHE_SIZE,JAVA_POOL_SIZE,LARGE_POOL_SIZE,LOG_BUFFER,SHARED_POOL_SIZE等。2,数据缓冲区调整
通过下列两种方式检查数据缓冲区设置是否合理:查看数据库缓冲区的命中率,执行命令:select 1 - ((physical.value - direct.value -lobs.value) / logical.value)"Buffer Cache Hit Ratio"from v$sysstat physical,v$sysstat direct,v$sysstat lobs,v$sysstatlogicalwhere physical.name = "physical reads"anddirect.name="physical reads direct"andlobs.name="physical reads direct (lob)"andlogical.name="session logical reads";运行结果:SQL> select 1 - ((physical.value - direct.value - lobs.value) /logical.value)2 "Buffer Cache HitRatio"3 from v$sysstatphysical,v$sysstat direct,v$sysstat lobs,v$sysstat logical4 where physical.name ="physical reads"5 and direct.name="physicalreads direct"6 and lobs.name="physical readsdirect (lob)"7 and logical.name="sessionlogical reads";Buffer Cache Hit Ratio---------------------- 0.958117758479709SQL>惯例来说,上述语句当>0.9实说明调整充分的。命中率是高的,这里已经为0.95,所以命中率还是比较可观的。对于数据库系统而言,数据缓冲区中包括的DEFAULT缓冲池就足够应用需要了。查询数据缓冲区中每个缓冲区的逻辑读和物理读的信息,可以查询动态性能视图v$buffer_pool_statistics,例如:SQL> selectt1.name,t1.PHYSICAL_READS,t1.DB_BLOCK_GETS,t1.CONSISTENT_GETS,1-(t1.PHYSICAL_READS/(t1.DB_BLOCK_GETS+t1.CONSISTENT_GETS))"Hit Ratio"2 from v$buffer_pool_statisticst13 ;NAME PHYSICAL_READS DB_BLOCK_GETSCONSISTENT_GETS Hit Ratio-------------------- --------------------------- --------------- ----------DEFAULT 44480354387 571096618 33595740186 -0.3018575SQL>调整数据缓冲区大小如果数据缓冲区小于90%,就要考虑调整数据缓冲区大小。增大数据缓冲区之前,先看看V$DB_CACHE_SIZE(select * from v$db_cache_advice),确定数据缓冲区增大到多少能够显著降低物理I/O的数量,然后动态修改初始化参数DB_CACHE_SIZE。初始化参数DB_CACHE_SIZE对应的是标准数据缓冲区大小,如果要修改非标准的数据缓冲区大小,需要修改初始化参数DB_nK_CACHE_SIZE(n取值为2、4、8、16、32,且n不能是标准数据块大小)3,共享池调整
3.1 库缓存命中率
可以通过查询动态性能视图v$librarycache(select * from v$librarycache;),该视图保存了数据库最近一次启动以来库缓存活动的统计信息,每一行记录反映了库缓存中一个条目类型的统计信息,通过namespace列值来识别每个条目类型。例如:selectt1.NAMESPACE,t1.PINS,t1.PINHITS,t1.RELOADS,t1.INVALIDATIONS from v$librarycachet1 order by t1.NAMESPACE;SQL> selectt1.NAMESPACE,t1.PINS,t1.PINHITS,t1.RELOADS,t1.INVALIDATIONS from v$librarycachet1 order by t1.NAMESPACE;NAMESPACE PINS PINHITS RELOADS INVALIDATIONS-------------------------------------------------------------------------- ---------- ---------- -------------APP CONTEXT 2 1 0 0BODY 28468616 28458242 1818 46CLUSTER 114902 114198 0 0DBINSTANCE 0 0 0 0DBLINK 0 0 0 0DIRECTORY 371 81 0 0EDITION 10577860 10577856 0 0INDEX 403451 315690 11194 0JAVA DATA 3161 1876 0 0JAVA RESOURCE 3413 2124 0 0JAVA SOURCE 3413 2121 0 0OBJECT ID 0 0 0 0PIPE 2940 2936 0 0QUEUE 755296 754776 218 0RULE 732 365 82 0RULESET 18358 17693 26 0SCHEMA 0 0 0 0SQL AREA 1252576540 1223849814 1430167 926624SUBSCRIPTION 50182 49948 6 0TABLE/PROCEDURE 162038767 161228629 429539 263NAMESPACE PINS PINHITS RELOADS INVALIDATIONS-------------------------------------------------------------------------- ---------- ---------- -------------TEMPORARY INDEX 25602 0 7514 0TEMPORARY TABLE 70046 0 55020 0TRIGGER 12753767 12747803 1146 0XDB CONFIG 1 0 0 0XML SCHEMA 27 6 4 025 rows selectedSQL>PINS:针对特定NAMESPACE的对象请求次数PINHITS:针对特定NAMESPACE的对象请求次数,在库缓存中存在的次数RELOADS:需要从磁盘中加载对象的次数INVALIDATIONS:针对特定的namespace,由于依赖对象的改变而被标识为失败的对象的次数。库缓存命中率的计算公式(sum(t1.PINHITS)/sum(pins)计算),例如:SQL> select sum(t1.PINHITS)/sum(pins)"Lib Ratio" from v$librarycache t1;LibRatio----------0.97973692SQL>也可以查询动态性能视图v$sgastat来获取共享池空闲内存的数量。例如:SQL> select t1.* from v$sgastat t1 wheret1.NAME="free money" and pool="shared pool";POOL NAME BYTES------------ ------------------------------------SQL>看到awr报表中
更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2015-09/123285p2.htm
MySQL和Oracle时区设置比较PLSQL 经常自动断开失去连接的解决过程相关资讯 Oracle优化 Oracle数据库性能优化
- Oracle 查询技巧与优化 (今 09:02)
- Oracle优化实战(绑定变量) (06/16/2015 20:01:38)
- Oracle 多表查询优化 (02/24/2015 20:46:48)
| - Oracle多表查询优化 (11/24/2015 12:02:59)
- Oracle热点表优化总结 (02/25/2015 09:39:32)
- Oracle数据库查询性能优化问题 (09/11/2014 16:50:40)
|
本文评论 查看全部评论 (0)