学习
实践
活动
专区
工具
TVP
写文章
专栏首页bisal的个人杂货铺与IO相关的等待事件troubleshooting-系列4

与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所需要的响应时间。

(未完待续)

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:http://blog.csdn.net/bisal复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

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

    近来XX应用充分暴露出开发人员最初只关心功能,未考虑性能的问题,夜维、OLTP应用均出现了不同程度的与数据库相关的性能问题。

    bisal
  • 与IO相关的等待事件troubleshooting-系列6

    当Oracle从多个数据文件并行读到内存(PGA或Buffer Cache)的非连续缓冲时,可以看到这种等待事件。在恢复操作或为了优化而预处理缓冲(代替执行多...

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

            这种等待事件通常产生于一个或多个控制文件的IO。像redo日志切换和检查点事件,都会产生频繁的控制文件访问。因此调优这些实践可以间接地影响这种等...

    bisal
  • 与IO相关的等待事件troubleshooting-系列3

            使用Statspack类似的工具对数据库响应时间分析之后,已经表明与IO相关的等待事件限制了系统性能,有许多的方法可以判断这种问题。

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

            这是另一种常见的等待事件。他产生于Oracle从磁盘读取多个块到Buffer Cache中非连续(" scattered")缓存的时候。这...

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

    数据库性能调优方面一项关键的方法就是响应时间分析。找出时间都花费在数据库的哪些环节。

    bisal
  • 与IO相关的等待事件troubleshooting-系列8

            Redo日志活动期间会有很多的等待事件,而且他们大多是和IO相关的。最重要的两个就是‘log file sync’和‘log file para...

    bisal
  • 与IO相关的等待事件troubleshooting-系列9

            这种等待事件的产生原因是包含DBWR进程和IO Slaves的Buffer Cache操作。

    bisal
  • 实战 MySQL 锁等待问题的定位与排查

    在 MySQL 的实际使用中,常常会遇到一条 SQL 执行非常慢的情况,此前我们总结了一系列博客来排查相关的问题:

    用户3147702
  • 初相识|performance_schema全方位介绍(PFS)

    现在,很高兴的告诉大家,我们基于 MySQL 官方文档加上我们的验证,整理了一份可以系统学习 performance_schema 的资料分享给大家,为了方便大...

    老叶茶馆
  • Tomcat NIO(5)-整体架构

    在上一篇文章里我们主要介绍了 tomcat NIO 的数据处理类,即实现读写封装的Request 和 Response,在这里我们主要介绍 NIO 整体架构。

    TA码字
  • 按 file 分组统计视图 | 全方位认识 sys 系统库

    在上一篇《按 user 分组统计视图 | 全方位认识 sys 系统库》中,我们介绍了sys 系统库中按 user 分组统计的视图,类似地,本期的内容将为大家介绍...

    老叶茶馆
  • 等待事件统计视图 | 全方位认识 sys 系统库

    在上一篇《内存分配统计视图 | 全方位认识 sys 系统库》中,我们介绍了sys 系统库如何查询内存事件统计信息和buffer pool统计信息,本期的内容先给...

    老叶茶馆
  • 配置详解 | performance_schema全方位介绍

    在上一篇 《初相识 | performance_schema全方位介绍》 中粗略介绍了如何配置与使用performance_schema,相信大家对perfor...

    沃趣科技
  • How to Tell if the I/O of the Database is Slow - 2

            单块IO,指一次只读一个块。例如,当一个session等待一个单块IO时,典型的等待事件就是“db file sequential read”,...

    bisal
  • 通过 JFR 与日志深入探索 JVM - 1. JFR 简介与发展

    我们都知道,黑匣子是用于记录飞机飞行和性能参数的仪器。在飞机出问题后,用于定位问题原因。JFR(Java Flight Record) 就是 Java 的黑匣子...

    干货满满张哈希
  • Tomcat NIO(1)-开篇

    在日常工程或者开发中避免不了引入 web 服务器(或者是 tcp 服务器),常用服务器有tomcat,jetty,undertow,netty 等等,对于这些服...

    TA码字
  • Android:RxJava 结合 Retrofit 全面实现 网络请求出错重连

    Carson.Ho
  • Java网络编程与NIO详解2:JAVA NIO 一步步构建IO多路复用的请求模型

    本文转载自:htJava网络编程与NIO详解2:JAVA NIO 一步步构建IO多路复用的请求模型

    Java技术江湖

扫码关注腾讯云开发者

领取腾讯云代金券