Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2885535
  • 博文数量: 599
  • 博客积分: 16398
  • 博客等级: 上将
  • 技术积分: 6875
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-30 12:04
个人简介

WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606

文章分类

全部博文(599)

文章存档

2014年(12)

2013年(56)

2012年(199)

2011年(105)

2010年(128)

2009年(99)

分类: Oracle

2009-12-01 14:18:44

  1. 名称可能造成误导,该事件是单块读取操作产生的等待事件。ORACLE进程需要一个当前不在SGA中的块,该进程会等待从磁盘读入所需数据块到SGA中。
  2. 当从索引、回滚或撤消段、按ROWID访问的表、重建控制文件、转储数据文件标题(dump)、数据文件标题读取....提交该事件。
  3. 存在该事件并不一定表示存在性能问题,但是如果该事件的等待时间比其他等待时间多得多,则表明应用程序正在执行大量的索引读取,需要要考虑全表扫描是否更为有效?通过索引访问数据是否合适?
  4. 如果存在高平均等待时间,该事件可能是由于受到缓慢的IO子系统和拙劣的数据库文件布局的影响。但对系统IO的调整应该在应用程序调整和SQL调整之后进行。
  5. 如果执行计划是通过索引rowid来访问表中数据块,检查该索引的群集因子(DBA_INDEXES.CLUSTERING_FACTOR)是值得的。

如果索引的CLUSTERING_FACTOR值接近于表中块的数量,则表中的大多数行就被排序。

如果索引CLUSTERING FACTOR该值接近于表中行的数据,则表示表中的大多数行被随机排序。

  1. 初始化参数会对索引的使用造成影响,进而影响db file sequential read等待事件:

OPTIMIZER_INDEX_COST_ADJ:缺省值是100,如果设置较低,则ORACLE会认为使用索引访问是廉价的。

OPTIMIZER_INDEX_CACHING:缺省值是0,如果设置较高,则ORACLE会认为有较高百分比的索引块已位于CACHE中。

  1. 参数说明:

事件号:187

事件名:db file sequential read

参数一:读取数据块的文件号file#

参数二:起始块号block#

参数三:块数blocks,绝大多数情况下是1,但对临时段可以大于1.


由参数P1与P2推得访问的数据对象:

select s.segment_name, s.partition_name 
  from dba_extents s 
 where  between s.block_id and (s.block_id + s.blocks -1) and s.file_id = 


  1. 等待时间:无超时
  2. 查询各个会话中该等待事件在总等待时间中所占比率:

select a.sid,
       a.event,
       a.time_waited,
       round(a.time_waited/c.sum_time_waited*100 , 2) || '%' pct_wait_time,
       round((sysdate - b.LOGON_TIME) * 24) hours_connected
  from v$session_event a,
       v$session b,
       (select sid, sum(time_waited) sum_time_waited
          from v$session_event
        
         where event not in ('null event''SQL*Net message to client',
                'pmon timer''pipe get''smon timer''jobq slave wait',
                'rdbms ipc message''rdbms ipc reply''PX Deq: Join ACK',
                'PX Deq: Signal ACK'
        having sum(time_waited) > 0  -- 对group by 产生结果的挑选
         group by sid) c
 where a.sid = b.sid
   and a.sid = c.sid
   and a.TIME_WAITED > 0
   and a.EVENT = 'db file sequential read'
 order by hours_connected desc, pct_wait_time

  1. 查询系统平均等待时间:

SELECT a.event,
       a.total_waits,
       a.time_waited,
       round(a.time_waited / a.total_waits,2) average_wait,
       trunc(SYSDATE - b.startup_time) days_old
  FROM v$system_event a, v$instance b
 ORDER BY a.time_waited

  1. 查询每个数据库文件的单块读取的时间,以此可以判断哪些文件是热点文件。

SELECT t.file_name,
       t.tablespace_name,
       round(s.singleblkrdtim / s.singleblkrds, 2AS "单块读所费时间(cs)", 
       s.READTIM,
       s.WRITETIM
  FROM v$filestat s, dba_data_files t
 WHERE s.file# = t.file_id

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