Oracle数据库性能优化之内存磁盘

1,内存结构优化概述
1.1 缓冲区
影响数据库运行性能的缓冲区包括可以共享的SGA和服务器进程私有的pga两大类,其中sga又包括共享池、大型池、java池、数据缓冲区、流池、redo log缓冲区。

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$sysstatlogical

where 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 logical

4    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.958117758479709

SQL>

惯例来说,上述语句当>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_statisticst1

3  ;

NAME                PHYSICAL_READS DB_BLOCK_GETSCONSISTENT_GETS  Hit Ratio

-------------------- --------------------------- --------------- ----------

DEFAULT                44480354387    571096618    33595740186 -0.3018575

SQL>

调整数据缓冲区大小

如果数据缓冲区小于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            0

BODY                                                              28468616  28458242      1818            46

CLUSTER                                                            114902    114198          0            0

DBINSTANCE                                                              0          0          0            0

DBLINK                                                                  0          0          0            0

DIRECTORY                                                              371        81          0            0

EDITION                                                          10577860  10577856          0            0

INDEX                                                                403451    315690    11194            0

JAVA DATA                                                            3161      1876          0            0

JAVA RESOURCE                                                          3413      2124          0            0

JAVA SOURCE                                                          3413      2121          0            0

OBJECT ID                                                                0          0          0            0

PIPE                                                                  2940      2936          0            0

QUEUE                                                              755296    754776        218            0

RULE                                                                    732        365        82            0

RULESET                                                              18358      17693        26            0

SCHEMA                                                                    0          0          0            0

SQL AREA                                                        1252576540 1223849814  1430167        926624

SUBSCRIPTION                                                        50182      49948          6            0

TABLE/PROCEDURE                                                  162038767  161228629    429539          263

NAMESPACE                                                            PINS    PINHITS    RELOADS INVALIDATIONS

-------------------------------------------------------------------------- ---------- ---------- -------------

TEMPORARY INDEX                                                      25602          0      7514            0

TEMPORARY TABLE                                                      70046          0    55020            0

TRIGGER                                                          12753767  12747803      1146            0

XDB CONFIG                                                                1          0          0            0

XML SCHEMA                                                              27          6          4            0

25 rows selected

SQL>

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.97973692

SQL>

也可以查询动态性能视图v$sgastat来获取共享池空闲内存的数量。例如:

SQL> select t1.* from v$sgastat t1 wheret1.NAME='free money' and pool='shared pool';

POOL        NAME                          BYTES

------------ ------------------------------------

SQL>

看到awr报表中

Oracle数据库性能优化之内存磁盘

猜你喜欢

转载自www.linuxidc.com/Linux/2015-09/123285.htm