日志文章

2007年06月22日 21:05:58

Oracle 内存的配置和使用 (10g r2) <4>

配置和使用REDO LOG BUFFER
  我们知道服务器进程会把把buffe cache里面的数据库块改变保存在重做log buffer里面。在满足一定条件,LGWR进程就会把重做buffer log里面的数据写入在线日志中:
  1.log buffer 超过它1/3大小
  2.服务器进程运行COMMIT或者ROLLBACK会触发服务器进程运行LGWR
  3.DBWR进程会触发LGWR
  一个较大的buffer能够给于更多redo空间,使得LGWR能够有效的写出redo数据。一个太小的buffer,如果update频繁,那么LGWR也会不停的将数据刷出。
  如果一个服务器拥有强劲的CPU和差劲的磁盘,一个较大buffer可以使得处理器可能会弥补磁盘差劲的效率。在这种情况,你还可以:
  1.改进checkpointing 或者 归档进程。
  2.改善log writer的性能(移动所有online log到更快的磁盘)
  更好的使用redo log buffer 其实很简单:
  控制好你的commit事务。
  当读取大量数据的时候,使用NOLOGGING操作。
  redo log buffer的大小使用初始化参数LOG_BUFFER定义,它可以动态修改。
确定log buffer的大小
  通常当应用程序的插入,修改,删除大量的数据的时候,需要改变默认的log buffer的大小。log buffer在SGA里面是相对小的一块,但是适当的配置它的大小,在很多请客下能够显著的改善性能。
  一般,在系统初始估算的buffer大小的规则是:
  最大(0.5M, (128K * number of cpus))
  在大多数系统中,超过1M的log buffer 不会有任何性能改善。不过过多的log buffer也不会对性能有负面的影响,它只是多余的内存罢了。
Log buffer的统计
  统计REDO BUFFER ALLOCATION RETRIES反应了用户进程等待redo log buffer空间的情况。这个统计在V$SYSSTAT中可以查询到。
  查询如下:
  SELECT NAME, VALUE
  FROM V$SYSSTAT
  WHERE NAME = 'redo buffer allocation retries';
 如果redo buffer allocation retries增长过快,那么说明进程存在很多redo log buffer的空间分配等待。可以试着增加LOG_BUFFER的大小。

Tags: Oracle 内存  

类别: Administer |  评论(0) |  浏览(7721) |  收藏
发表评论
看不清楚,换一张