Oracle优化缓冲区之高论
本人很喜欢Oracle 在工作中也很喜欢总结关于Oracle优化缓冲区的经验教训 下面就这个问题来详细说说Oracle优化缓冲区吧
( )获取缓冲区活动情况
为了Oracle优化缓冲区 首先应了解缓冲区的活动情况 这可以通过查询动态性能表(需有SELECT ANY TABLE特权)V$SYSSTAT来获得
SVRMGR> select name value from v$sysstat
> where name in( db block gets consistent gets physical reads );
NAME VALUE
db blockgets
nsistent gets
physica reads
rows selected
其中 db block gets 和 consistent gets 的值是请求数据缓冲区中读的总次数 physical reads 为请求数据时引起从盘中读文件的次数
( )缓冲区命中率
从缓冲区读的可能性的高低称为缓冲区命中率 它可用如下公式计算 Hot Ratio= (physical reads/(db block gets+consistent gets)
缓冲区命中率越高 其速度就越快 如果命中率低于 %或 %时 则应增加缓冲区(即DB_BLOCK_BUFFERS) 以改进性能 根据公式可以计算出本例中的Hot Ratio= ( /( + )= % 如果缓冲区的命中率很高 希望在保持良好性能下适当减少缓冲区 这时可减少DB_BLOCK_BUFFERS的值 其最小值为
当一个文件上的输入/输出(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 记录往盘上写数据库文件的次数
lishixinzhi/Article/program/Oracle/201311/18623