ITPub博客

首页 > 应用开发 > IT综合 > 调整缓冲区高速缓存(Buffer Cache)的性能(1)

调整缓冲区高速缓存(Buffer Cache)的性能(1)

原创 IT综合 作者:jss001 时间:2009-02-15 19:48:17 0 删除 编辑
  Buffer cache由数据块组成。
  
  1. Buffer cache的工作原理
  
  LRU列表:MRU ………………. LRU。(全表扫描FTS放在LRU端。)
  
  缓冲区块的状态:Free、Pinned、Clean、Dirty。
  
  Dirty List或Write List(写列表)。
  
  数据库写进程DBW0将缓冲区高速缓存中的数据写到数据文件中。
  
  2.测量Buffer cache的性能
  
  测量Buffer cache的命中率:
  SQL> 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$SYSSTAT logical where physical.name = ‘physical reads’
  And direct.name = ‘physical reads direct’ and
  lobs.name = ‘physical reads direct (lob)’
  And logical.name = ‘session logical reads’;
  “Buffer Cache Hit Ratio”的值要 > 90%。
  
  使用STATSPACK来监视Buffer cache。
  
  使用REPORT.TXT来监视Buffer cache。
  
  非命中率指标:Free Buffer Inspected、Free Buffer Waits、Buffer Busy Waits。(V$sysstat)
  
  使用Performance Manager(数据库例程)来监视Buffer Cache。
  
  3. 提高缓冲区高速缓存性能的方法
  
  加大Buffer Cache的大小:init.ora参数DB_CACHE_SIZE(动态参数)。
  
  使用Buffer Cache Advisory功能决定Buffer Cache的大小:
  
  首先将init.ora参数DB_CACHE_ADVICE设成ON,然后查询V$DB_CACHE_ADVICE。
  
  使用多个缓冲区池:
  Keep Pool: DB_KEEP_CACHE_SIZE
  Recycle Pool:DB_RECYCLE_CACHE_SIZE
  Default Pool: DB_CACHE_SIZE
  
  在内存中缓存表: 表的CACHE选项,对优化小表的全表扫描。
  
  正确创建索引。
  
  4.调整Large Pool和JAVA POOL
  
  Large Pool用于共享服务器、RMAN、并行查询、DBWR的从属进程。
  
  Large Pool的大小通过init.ora参数Large_pool_size设置。默认为8M。
  
  从V$sgastat中监视free memory的值:
  
  SQL>SELECT name,bytes FROM V$sgastat WHERE pool = ‘large pool’;
  
  JAVA_POOL池的默认大小为32M。对于大型Java应用程序,JAVA_POOL池的大小应大于50M。
  
  init.ora参数java_pool_size
  
  从V$sgastat中监视free memory的值。
  
  SQL>SELECT name,bytes FROM V$sgastat WHERE pool = ‘java pool’;
  
  调整重做有关的性能
  
  Oracle重做有关的组件包括:Redo Log Buffer、Online Redo Log、LGWR、Archive Log、Checkpoint、Arch0。
  
  1. 监视Redo Log Buffer的性能
  
  Redo Log Buffer不采用LRU(Least Recently Used)算法管理。
  
  当下列事件发生时,Redo Log Buffer的内容存盘:
  
  Commit时、每3秒、空间使用1/3、达到1M、检查点。
  
  如果写入Redo Log Buffer的速度超过LGWR存盘的速度,就会因等待而降低性能。
  
  监视Redo Log Buffer的重试率(<1%)。
  Select retries.value/entries.value “Redo Log Buffer Retry Ratio”
  From V$sysstat retries, V$sysstat entries
  Where retries.name = ‘redo buffer allocation retries’
  And entries.name = ‘redo entries’;
  “Redo Log Buffer Retry Ratio”的值要 < 1%。
  
  Select name,value from V$sysstat where name=’redo log space requests’;
  
  如果该值大,需要增加Redo Log Buffer。
  
  2. 提高Redo Log Buffer的性能
  
  增加Redo Log Buffer的大小:init.ora参数log_buffer。
  
  减小重做日志的生成量。(如果设置表的NOLOGGING属性,下列操作不记录在Online Redo Log中:用SQL* Loader的直接路径加载。
  
  NOLOGGING属性还可用于下列SQL语句:CREATE TABLE AS SELECT、CREATE INDEX、
  ALTER INDEX REBUILD、CREATE TABELSPACE)。
  
  3. 调整检查点进程的性能
  
  测量检查点进程的性能:没有完成的检查点进程的次数。
  select * from V$system_event;
  
  两个事件:checkpoint completed、log file switch(checkpoint incomplete)。
  
  Select * from V$sysstat。
  background checkpoints started和background checkpoints completed。
  
  使用Alert日志来记录检查点进程:init.ora参数log_checkpoint_to_alert。
  
  使用Performance Manager来测量检查点进程的性能:I/O中的平均灰数据队列长度(如果为0,说明检查点太频繁)。
  
  建议调整online redo log的大小,使检查点进程每20-30分钟执行一次。
  
  4. 调整联机重做日志文件
  
  使用V$system_event来监视联机重做日志文件的性能:
  log file parallel write、log file switch completed。
  
  调整联机重做日志文件的方法:与数据文件、控制文件、归档日志文件分开,放在原始设备上。
  
  5. 调整归档性能
  
  检查归档进程的性能:通过V$system_event中的log file switch(archiving needed)事件。
  
  检查每个归档进程的状态:V$archive_processes。
  
  创建多个归档进程:init.ora参数LOG_ARCHIVE_MAX_PROCESSES(默认为2)。[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/18921899/viewspace-1017385/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    306
  • 访问量
    871833