与IO相关的等待事件troubleshooting-系列4

与数据文件IO相关的等待事件

接下来的等待事件是与数据文件的IO操作时产生的。

'db file sequential read'

        这是一种最常见的IO相关的等待。大多数情况下,他指的是单块读,例如索引数据块或通过索引访问的表数据块,也能在读取数据文件头块时看到这种等待事件。在更早的版本中,这种等待事件也会产生于从磁盘的排序段通过多快读的方式读入Buffer Cache的连续("sequential")缓冲。

        如果这种等待事件占据了大部分的等待时间,可以尝试以下的若干方法:

1. 找到物理读Top前几位的SQL语句(从Statspack或AWR报告的“SQL ordered by Reads”节或V$SQL视图),进行调优以减少IO请求:

(1) 如果使用了索引范围扫描(Index Range scans),且索引选择性较差,那么就需要访问比正常情况更多的块。通过强制使用选择性更好的索引,访问同一张表可以读取更少的索引块(花费更少的物理IO)。

(2) 如果索引出现碎片化,可能仍旧会访问更多的块,因为单块包含的索引数据更少。

(3) 如果索引的Clustering Factor非常大,需要访问更多的表数据块,才能在每个索引块上得到行数据。通过重建表,根据特定的索引列对行进行排序,能够降低Clustering Factor,以及每个索引块需要访问的表数据块数量。例如,如果表包含A,B,C和D列,索引是B,D,那么重建表为:CREATE TABLE new AS SELECT * FROM old ORDER BY b,d;

(4) 使用分区以减少每个使用分区剪裁的SQL语句需要访问的索引和表数据块的数量。

2. 如果没有特殊的SQL语句使用了较差的执行计划,但仍旧产生了比正常更多的物理IO,以下情况可能发生:

(1) 特殊的数据文件IO可能处理非常缓慢,原因可能是磁盘的过度访问。这种情况下,查看Statspack的"File I/O Statistics"节(或V$FILESTAT)可以帮我们找到这样的热磁盘,通过手工移动这些数据文件到其它的存储以分散IO,或者充分利用条带化,RAID和其它的技术,自动执行IO负载均衡。

(2) 从Oracle 9.2开始,通过使用来自V$SEGMENT_STATISTICS视图的段统计信息,我们也能找到哪些段(表或索引)存在最多的物理读。然后我们能详细研究下这些段的细节,例如索引是否需要重建或者是否需要使用分区来降低IO。Statspack也可以在level 7级别上产生“段统计信息”的报告。

3. 如果没有SQL使用较差的执行计划,IO也平均地分不到所有磁盘,但响应时间仍旧较长,那么一个大的Buffer Cache缓冲可能有帮助:

        在Oracle 8i,用逐渐增长的DB_BLOCK_BUFFERS做个实验。

        通过从Statspack中衡量Buffer Cache Hit Ratio,直到没有任何提高为止。

(1) 在Oracle 9i之前的版本,可以使用Buffer Cache Advisory工具(从Statspack报告中可以得到)来调整Buffer Cache的容量。

(2) Oracle 10g之前的版本,ASMM(Automatic Shared Memory Management)能够用来让数据库根据当前负载,自动判断Buffer Cache的最佳容量。(可参考:Document 257643.1 Oracle Database 10g Automated SGA Memory Tuning)

(3) 对于热段,多Buffer Pools的使用可以帮助解决问题,可以将这样的“热”索引和表放到KEEP缓冲池。(可参考:Document 76374.1 Multiple Buffer Pools)

4. 最后,还可以考虑降低经常访问的段中包含的数据量(例如将旧的、不需要的数据移出数据库),或将这些段移动到更快的磁盘中,以降低其IO所需要的响应时间。

(未完待续)

时间: 2024-07-30 11:00:07

与IO相关的等待事件troubleshooting-系列4的相关文章

与IO相关的等待事件troubleshooting-系列2

Troubleshooting步骤: Troubleshooting与IO相关的等待: 数据库性能调优方面一项关键的方法就是响应时间分析.找出时间都花费在数据库的哪些环节. 时间是性能调优中最重要的属性.用户通过交易或批处理任务的响应时间来感知系统的性能. Oracle的响应时间分析使用如下公式: Response Time = Service Time + Wait Time 响应时间=服务处理时间+等待时间 '服务处理时间'使用'CPU used by this session'统计数据来衡

与IO相关的等待事件troubleshooting-系列7

与控制文件IO相关的等待事件:         这种等待事件通常产生于一个或多个控制文件的IO.像redo日志切换和检查点事件,都会产生频繁的控制文件访问.因此调优这些实践可以间接地影响这种等待事件. 'control file parallel write'         这种等待事件通常发生于服务器进程正在更新所有控制文件副本的时候.如果这种等待事件占据大部分事件,那么需要检查所有控制文件副本在IO路径(控制器,物理磁盘)的瓶颈. 可以用的方法: 1. 降低控制文件副本的数量,确保所有副本

与IO相关的等待事件troubleshooting-系列1

近来XX应用充分暴露出开发人员最初只关心功能,未考虑性能的问题,夜维.OLTP应用均出现了不同程度的与数据库相关的性能问题. 这个应用所在磁盘的IO较差,原因在于这块磁盘较旧,已进入更换的流程,但短期内还不能更换,对应用是个极大的隐患.而且也出现过某段时间IO非常差,导致应用处理速度非常缓慢.针对与IO相关的性能问题,MOS有篇文章(223117.1)介绍的就是与IO相关的troubleshooting,拜读一下. 这篇文章的目的:针对主要争用是IO相关的场景下,Oracle调优的一些思路. 主

与IO相关的等待事件troubleshooting-系列5

'db file scattered read'         这是另一种常见的等待事件.他产生于Oracle从磁盘读取多个块到Buffer Cache中非连续("scattered")缓存的时候.这种读一次最大值是DB_FILE_MULTIBLOCK_READ_COUNT.这种典型场景像全表扫描(Full Table Scans)和全索引快速扫描(Fast Full Index scans).         如果这个等待事件占据大部分等待时间,下面的方法可以用到: 1. 找到执行

【等待事件】等待事件系列(3+4)--System IO(控制文件)+日志类等待

 [等待事件]等待事件系列(3+4)--System IO(控制文件)+日志类等待   1  BLOG文档结构图     2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 控制文件类等待 ② 日志类等待   2.2  相关参考文章链接 [推荐] 等待事件系列(1)--User I/O类型(下) http://blog.itpub.net/26736162/viewspace-2124435

【等待事件】等待事件系列(1)--User I/O类型

[等待事件]等待事件系列(1)--User I/O类型 1  BLOG文档结构图     2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ①  等待事件系列(1)--User I/O类型     Tips: ① 本文在ITpub(http://blog.itpub.net/26736162).博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaim

防患未然:Oracle gc等待事件的发现、处理与预防

系统环境 两节点的RAC:AIX6.1+Oracle 11.2.0.3.3   AWR里展示出来的各种症状(数据来自实例2) 虽然应用没有报障,但AWR报告里的各种迹象已经很明显了   (1)   gc buffer busy acquire排进了Top 5 Timed Foreground Events   图-1   (2)   除去DB CPU在gc buffer busy acquire之后的就是gc cr block busy了   图-2   (3)   2h21bq1mnc5kd这

【MOS】常见问题cursor library cache类型的等待事件

[MOS]常见问题:'cursor:mutex ..'/ 'cursor:pin ..'/ 'library cache:mutex ..'类型的等待事件 (文档 ID 1525791.1) 文档内容 用途 问题和答案   什么是 'cursor: ' 等待事件?   最常见的等待事件是什么?   等待事件最常见的原因是什么?   如何避免这些等待事件?   可以在什么位置找到原因诊断以及关于这些等待事件的更多信息?   有用参考 参考 适用于: Oracle Database - Enterp

oracle等待事件7——事务上的等待事件

1.enq:TM-contention 执行DML期间,为防止对DML相关的对象进行修改,执行DML的进程必须对该表获得TM锁,若获得TM锁的过程发生争用,则等待enq:TM-contention事件. TM锁其用途十分明确,但是准确的概念及定义方面有容易混淆的一面.oracle的手册上关于锁的分类说明如下: DML锁:Date lock.执行DML时保护数据的锁.Row Lock(TX)保护特定行,Table Lock(TM)保护整个表,可以通过dba_kml_locks观察. DDL锁:Da