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

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

解决IO问题的常用方法

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

        接下来的章节会介绍排查等待事件的方法。

        有一些方法可以不用管特定的等待事件。在这个章节,会介绍和解释每个方法背后的概念和基本原理。

通过对SQL的调优降低数据库的IO请求

        没有用户SQL使用的数据库只会产生很少甚至不产生IO。最终由数据库产生的IO都会直接或间接地源于用户执行的SQL的本质和数量。

        这就意味着通过控制SQL语句产生IO的数量,有可能限制数据库的IO请求。通过调优SQL可以达到这样的目的,让他们的执行计划产生最小的IO操作数量。

        在典型的问题场景下,可能只有很少的SQL,由于他的执行计划非最优,导致产生比常用更多的物理IO,降低数据库的整体性能。

        从Oracle 10g开始,ADDM通过自动识别最有影响的SQL语句,可以辅助SQL调优过程。然后,SQL调优建议器能够用来自动调整这些语句,降低IO资源消耗。(可以参考Document 262687.1  How to use the Sql Tuning Advisor)。

通过调整实例参数降低数据库的IO请求

1. 使用内存缓冲限制IO:

        数据库需要的IO数量受内存缓冲量的限制,例如Buffer Cache,Log Buffer,不同的Sort Areas等。增大Buffer Cache,可以为数据库进程(逻辑IO)产生提供更多的buffer访问,满足将磁盘(物理IO)读取转为内存读取。如果有更大的内存排序区,那么排序操作期间资源消耗殆尽,导致不得不使用磁盘的临时表空间,这样的可能性就会降低。其它缓存也依照类似的概念工作。

2. 调整多块IO(10g之前)的大小:

        独立的多块IO操作大小能够通过实例参数控制。当达到极限值时,相比使用更多更小的IO,使用更少更大的IO时,多块IO会执行得更快,例如,同样传输100Mb的数据,相比每次100Kb的数据传输请求1000次,或者每次10Kb的数据传输10000次,每次1Mb的数据传输100次显然要完成得更快。当达到极限值后,区别就不那么明显了:1Gb的数据传输,每次10Mb大小请求100次(如果操作系统最大IO传输大小限制允许),可能和一次传输1Gb大小的效率一样。究其原因,是因为一次IO处理的时间主要包括两个组件:

IO创建时间:

对于不同的IO容量基本一致,对于小IO容量则占据总体服务时间的大部分。

IO传输时间:

随着IO容量的增长而增加,对于小IO容量,通常小于IO创建时间。

        以上的结果,在10g R2以前,通过配置DB_FILE_MULTIBLOCK_READ_COUNT参数以使数据库可以使用更大、更少的多块IO,来更好地配置实例。

        10g R2之后,这个参数会自动设置,不建议人为修改。可参考:Document 841444.1 How To Set DB_FILE_MULTIBLOCK_READ_COUNT in 10g。

操作系统级别的IO优化

        充分利用IO处理能力,例如异步IO,或具有高级功能的文件系统,例如直接IO(绕过操作系统文件缓存)。另一种方法就是提高单次传输允许的最大IO容量限制(参考本文的max_io_size)。

通过使用Oracle ASM(Automatic Storage Manager)平衡数据库IO

        ASM在Oracle 10g中引入。他是一种文件系统,一种卷管理器,内建于数据库内核。他可以自动并行地进行所有磁盘驱动器的负载均衡,防止热点与性能最大化,甚至对于有数据快速更新的环境也适用。它能防止碎片化以至于从来不需要迁移数据回收空间。所有磁盘上的数据可以很好的平衡与条带化。细节也可以参考Document 249992.1 New Feature on ASM (Automatic Storage Manager)。

通过使用条带化,RAID,SAN或NAS平衡数据库IO

        这种方法依赖于存储技术,例如条带化,RAID,存储区域网络(SAN)和网络附加存储(NAS),他们可以在多物理磁盘之间自动地平衡数据库IO的负载,目的就是避免磁盘争用和IO瓶颈,因为在存储硬件上可能还有未使用的磁盘空间。更多的技术细节可以参考:"Optimal Storage Configuration Made Easy" by J. Loaiza,Document 30286.1  I/O Tuning with Different RAID Configurations。

通过在不同的文件系统,控制器和物理设备中手工移动数据库文件,重新分布数据库IO

        这是在缺少高级现代存储技术下的一种方法。目的就是为了分发数据库IO,以至于IO请求中不会有单组磁盘或控制器处于饱和,这里可能还有未使用的磁盘空间。与之前的方法相比,这种方法可能使用起来更困难,通常可能没用。

        在大多数据库中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-系列4

            这是一种最常见的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
  • 等待事件统计视图 | 全方位认识 sys 系统库

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

    老叶茶馆
  • 初相识|performance_schema全方位介绍(PFS)

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

    老叶茶馆
  • 实战 MySQL 锁等待问题的定位与排查

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

    用户3147702
  • 按 file 分组统计视图 | 全方位认识 sys 系统库

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

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

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

    沃趣科技
  • Tomcat NIO(5)-整体架构

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

    TA码字
  • Tomcat NIO(1)-开篇

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

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

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

    干货满满张哈希
  • How to Tell if the I/O of the Database is Slow - 2

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

    bisal
  • libev源码解析——I/O模型

            在《libev源码解析——总览》一文中,我们介绍过,libev是一个基于事件的循环库。本文将介绍其和事件及循环之间的关系。(转载请指明出于bre...

    方亮
  • MongoDB网络传输处理源码实现及性能调优-体验内核性能极致设计

    开源MongoDB代码规模数百万行,本篇文章内容主要分析MongoDB网络传输模块内部实现及其性能调优方法,学习网络IO处理流程,体验不同工作线程模型性能极致设...

    MongoDB中文社区

扫码关注腾讯云开发者

领取腾讯云代金券