本人很喜欢Oracle,在工作中也很喜欢总结关于Oracle优化缓冲区的经验教训,下面就这个问题来详细说说Oracle优化缓冲区吧。
(1)获取缓冲区活动情况
为了Oracle优化缓冲区,首先应了解缓冲区的活动情况。这可以通过查询动态性能表(需有SELECT ANY TABLE特权)V$SYSSTAT来获得。
- SVRMGR> select name ,value from v$sysstat
- 2> where name in('db block gets','consistent gets','physical reads');
- NAME VALUE
- db blockgets 3437
- consistent gets 30500
- physica reads 1963
- 3 rows selected.
其中,“db block gets”和“consistent gets”的值是请求数据缓冲区中读的总次数。“physical reads”为请求数据时引起从盘中读文件的次数。
(2)缓冲区命中率
从缓冲区读的可能性的高低称为缓冲区命中率。它可用如下公式计算:Hot Ratio=1-(physical reads/(db block gets+consistent gets)
缓冲区命中率越高,其速度就越快。如果命中率低于60%或70%时。则应增加缓冲区(即DB_BLOCK_BUFFERS),以改进性能。根据公式可以计算出本例中的Hot Ratio=1-(1963/(3437+30500)=92%。如果缓冲区的命中率很高,希望在保持良好性能下适当减少缓冲区,这时可减少DB_BLOCK_BUFFERS的值,其最小值为4。
当一个文件上的输入/输出(I/O)请求干扰了第二个文件的输入/输出请求时,那么这两个文件就会发生争用。所以两个随机存取的文件只有在无可能同时存取它们时,才可以存放在同一设备中。由此可以分为两种类型的I/O争用:并行I/O争用和干扰争用。并行I/O争用多发生在同一时间对同一设备请求多种存取时,这种类型的争用可以通过分离与表相联系的索引的办法来消除。干扰争用发生在对一个顺序文件进行写操作而同时进行读命令时中断而引起。
I/O优化的目的是解决I/O瓶颈问题,I/O的优化必须在内存优化之后进行,可以通过减少磁盘争用、有效分配数据块空间和避免动态空间管理三个方面来优化I/O。
减少磁盘争用
V$FILESTAT视图提供有关物理读写的信息。物理I/O针对磁盘,逻辑I/O针对内存。如果有多个进程同时访问同-磁盘,就产个磁盘争用。
监控Oracle的磁盘活动
要解决磁盘争用,首先应该知道磁盘的活动情况,确定是否发生争用。这可以通过查询动态性能表(需有SELECT ANY TABLE特权)V$FILESTAT和V$DATAFILE来确定。例如:
- SQL>SELECT Name,phyrds,phywrts
- FROM V$DATAFILE df,V$FILESTAT fs
- WHERE df.file#=fs.file#;
其中:
◆ phyrds:记录从盘上读每个数据库文件的次数。
◆ phywrts:记录往盘上写数据库文件的次数。
一个盘上总的I/O次数是该盘上所有数据库文件的phyrds和phywrts之和。必须把物理读写的总量控制在用户硬件和操作系统的***限制内。以上介绍Oracle优化缓冲区。
【编辑推荐】