Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33370
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2016-09-13 19:19
文章分类
文章存档

2016年(11)

我的朋友

分类: Oracle

2016-04-27 18:36:28

1. db file scattered read-DB 文件分散读取

    这种情况通常显示与全表扫描相关的等待。当数据库进行全表扫时,基于性能的考虑,数据会分散(scattered)读入Buffer Cache。如果这个等待事件比较显著,可能说明对于某些全表扫描的表,没有创建索引或者没有创建合适的索引,我们可能需要检查这些数据表已确定是否进行了正确的设置。然而这个等待事件不一定意味着性能低下,在某些条件下Oracle 会主动使用全表扫描来替换索引扫描以提高性能,这和访问的数据量有关,在CBO Oracle 会进行更为智能的选择,在RBO Oracle 更倾向于使用索引。因为全表扫描被置于LRULeast Recently Used,最近最少适用)列表的冷端(cold end),对于频繁访问的较小的数据表,可以选择把他们Cache 到内存中,以避免反复读取。当这个等待事件比较显著时,可以结合v$session_longops 动态性能视图来进行诊断,该视图中记录了长时间(运行时间超过秒的)运行的事物,可能很多是全表扫描操作(不管怎样,这部分信息都是值得我们注意的)。

2. db file sequential read-DB 文件顺序读取

    这一事件通常显示与单个数据块相关的读取操作(如索引读取)。如果这个等待事件比较显著,可能表示在多表连接中,表的连接顺序存在问题,可能没有正确的使用驱动表;或者可能说明不加选择地进行索引。在大多数情况下我们说,通过索引可以更为快速的获取记录,所以对于一个编码规范、调整良好的数据库,这个等待很大是很正常的。但是在很多情况下,使用索引并不是最佳的选择,比如读取较大表中大量的数据,全表扫描可能会明显快于索引扫描,所以在开发中我们就应该注意,对于这样的查询应该进行避免使用索引扫描。db file scattered read一般是在一次性读取多个连续的BLOCK的时候,产生的等待事件。很多网友喜欢把这个事件和全表扫描划等号,这其实是不全面的。全表扫描一般来说会产生db file scattered read,但是全索引扫描,索引范围扫描也会db file scattered readdb file sequential read是数据库中最常见的等待事件,一个状态良好的系统,这个等待应该占比较高的比重,排在所有等待事件的第一位(没有什么业务的系统可能除外)。

阅读(947) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~