关于io调优

在海量数据的情况下,数据库的性能问题有80%以上和IO有关,因此I/O优化是贯穿海量数据库管理全过程的重要工作。

I/O优化牵涉的面比较广,现在就从Oracle 数据库优化的一些主要方面详细阐述一下。在海量数据库环境下,Oracle数据库优化面临的最重要的任务是I/O优化,因为绝大多数大型数据库都或多或少存在I/O性能问题。

数据库的I/O性能涉及面十分广,因此I/O性能优化也是ORACLE数据库优化工作中最复杂的工作。进行I/O性能优化,基本的步骤是这样的:

1、采集系统数据,定位I/O性能问题;

2、分析并制订解决方案;

3、调整系统,解决问题;

4、评估优化结果。

优化ORACLE数据库的I/O性能,不能简单地从I/O入手,需要遵循数据库优化工作的基本原则。首先数据库优化的目的是提高系统的整体处理能力,提高事务响应速度。所有的优化工作都需要围绕这个目的来进行。数据库性能优化的手段有两个方面,一是减少处理时间,二是减少等待事件。减少处理时间要求应用编写得高效合理。减少等待时间要求系统的各种资源合理分配,不出现任何瓶颈。

数据库使用的系统资源包括CPU、内存、存储和网络。数据库优化的目的是合理分配这些资源,确保任何一种资源都不出现瓶颈。

根据上述原则,Oracle数据库的I/O性能优化不能只通过重新组合系统资源来达到提升数据库总体性能(包括I/O性能)的目的。

另一个方面,在优化I/O时也要考虑到其他资源的情况。

如果I/O单方面提升导致其他资源出现瓶颈,那么也会导致系统总体性能下降。特别是针对资源有限的系统的优化,如何有效利用不足的系统资源进行最优化的组合,在保证没有一种资源过载的情况下尽可能利用资源,是系统优化的关键。

如何确定系统的主要问题是I/O问题,并进一步定位I/O问题的根本原因是解决Oracle I/O性能问题的关键。I/O性能不佳,可能是多方面的问题。进行优化的第一步就是确定关键的性能瓶颈。

影响ORACLE数据库I/O性能的问题覆盖面十分广,根据作者多年从事Oracle数据库管理的经验,下面几个方面是影像数据库I/O性能的主要问题。

存储性能瓶颈:控制器不足、cache偏小,Cache设置不合理、I/O通道容量不足等。

磁盘性能瓶颈:磁盘数量过少、使用了速度比较低的磁盘等

使用了不合理的RAID模式。

在使用RAID的情况下,存在I/O热点,多个热点文件使用同一个磁盘。

异步I/O配置不正确  数据库各种缓冲区设置不合理,缓冲命中率过低  PGA的各种缓存设置过小,(对于Oracle 9i,在使用自动管理模式的情况下,PGA设置过小),导致大量的临时表空间操作

重做日志存在性能瓶颈  重做缓冲区设置不合理  存在热点数据  表空间碎片严重  表和索引的存储参数不合理  行迁移比较严重  存在大量大表扫描的SQL  SQL执行选择了不好的执行计划

当系统出现I/O问题时,数据库管理员最大的挑战是如何尽快找到问题的最根本原因。I/O问题的调整是十分复杂的,在没有找到根本原因之前进行调整往往无法达到最终的优化目标。需要注意的是I/O问题往往和大型的SQL语句有关。如果某个系统突然发生I/O性能问题,第一步需要排除一切I/O之外的问题。

确定I/O性能瓶颈的存在,并定位存在I/O性能瓶颈的设备是解决I/O性能问题的第一步。使用操作系统的监控工具可以实时监控I/O的情况。第一种方法是使用vmstat工具。使用该工具,可以查看b列的值,如果该值比较高,那么说明等待I/O的进程比较多,I/O可能存在问题:

$vmstat 1  10

procs             memory

r    b    w          avm    free

2    12   0     14572705   92752

2    12   0     14572705   93548

2    12   0     14572705   92910

2    12   0     14572705   93467

2    12   0     14572705   93546

2    12   0     14572705   93864

2    12   0     14572705   94557

2    12   0     14572705   93952

2    12   0     14572705   94017

2    12   0     14572705   93047

如果上述命令发现b比较大,那么说明可能存在I/O等待的现象,通过sar命令或者iostat命令可以进一步确认。如果用sar 命令监控时发现wio 比较大(比如超过40,这个值是经验值,根据不同的系统,这个值可以调整),那么基本可以确定存在I/O性能瓶颈,如下所示

$sar 1  10

HP-UX cuyn16  B.11.11 U 9000/800

15:01:44      %usr       %sys        %wio        %idle

15:01:45        16          3          57           24

15:01:45        15          2          59           19

15:01:45        21          3          57           16

15:01:45        20          2          63           14

15:01:45        17          2          67           12

15:01:45        12          1          75           7

15:01:45        16          2          75           5

15:01:45        10          1          84           1

15:01:45        18          2          79           6

如果发现wio值长时间高于40,那么说明I/O等待比较严重。此时可以通过sar -d 命令来监控,看看哪些I/O设备存在性能问题。如果发现某个设备的繁忙度长时间超过90%,就说明该设备比较繁忙。如果该设备的avserve 比较大或者比其他设备高很多,就说明该设备存在性能问题。比如下面的例子:

15:02:01      device     %busy     avque     r+w/s      blks/s     avwait     avserv

Average      c0t0d0        2.00     0.50         6          27      3.62        6.03

Average      c3t8d0        1.10     0.50         4          16      3.23        5.69

Average     c55t0d5       99.40     0.50        18          73      5.41       54.50

Average     c55t1d0        4.20     0.50         5          15      5.39        8.49

Average     c55t1d1       79.52     0.76        24         810      9.09       81.99

Average    c55t11d0       68.33     0.52        23        2909      5.60       72.40

Average    c55t11d2       31.07     1.14        25        1630     10.95       28.05

Average    c55t11d3       16.98     0.51        22        3075      5.24       13.39

Average    c55t11d5       71.83     2.59        26        1643     42.18       82.78

Average    c55t11d6       76.12     0.50        23        3012      5.58       76.47

Average    c55t12d0       30.57     1.02        26        1637     10.86       30.59

Average    c55t12d1       21.48     0.50        20        2826      5.12       19.55

Average    c55t12d3       80.72     2.74        29        1880     42.78       84.38

Average    c55t12d4       70.03     0.52        23        2887      5.83       66.85

Average    c55t14d1      100.00    54.57       104        6630   1315.98       71.54

Average    c55t13d1       77.72     0.55        19         297      5.79       80.19

从上面的数据可以看出,部分设备(比如C55t14d1)的等待事件比较长,并且avwait+avserv的时间比较长,说明该设备存在性能瓶颈。而大部分HDISK的avwait+avserv还比较正常,这说明存储系统并不存在普遍性的性能瓶颈,而性能瓶颈主要集中在热点盘组上。

通过Oracle的STACSPACK工具也可以检查系统的I/O问题。如果系统的性能不佳,并且可从报告中看到的sequential read等待事件是系统等待事件中排在前几位的事件,占系统总等待时间的比例比较高,那么系统很可能存在I/O性能问题。可以通过检查文件I/O情况来进一步确认并找出存在性能问题的设备。方法是通过检查文件I/O的平均读响应时间。如果某个文件的平均读响应时间超过20ms,那么说明该文件所属的文件系统可能存在性能问题。应该注意的是,20ms是一个相对参数,在不同的应用环境下该值可能会有所不同。通过比对操作系统的情况,数据库管理员应该很快就能确定你所管理的系统的平均读响应时间和操作系统I/O情况的对应关系。

检查读平均响应时间时还要注意几个问题。第一个问题是在报告时间区域内的I/O量,如果某个文件在报告时间区间内的I/O数量很小,那么此平均响应时间可能缺乏代表性,可以通过检查存放在相同设备上的其他文件来进一步确认。另外一种情况是平均每次读的数据量比较多(每次读的块数比较多),那么略高的平均读响应时间也是正常的。下面的数据就是从I/O存在问题的数据库上取下的STATSPACK数据:

Top 5  Timed Events

------------------------

Event                                          waits               Time(s)        %Total Ela Time

--------------------------------------------------------------------------------------------------

db file sequential read                        661,802           45,404                    60.79

SQL*Net more data from dblink                 3180,371            7,894                    10.57

CPU time                                                          5,077                     6.80

db file scattered read                          56,959            3,846                     5.15

buffer busy  waits                              42,376            2,541                     3.40

可以看出,db file sequential read 是等待事件中的第一位事件,占整个等待事件的60%以上,并且每次平均等待的时间为69ms.这是一个典型的I/O存在性能瓶颈的例子,通过STATSPACK 报告文件I/O性能分析数据,可以进一步检查到底哪些文件出现了问题:

INDEX_SPACE_OTHER                  /dev/vg10xp/rls_2g_vol05

9,171            2        52.2        1.0    7,911

/dev/vg10xp/rls_2g_vol106

8,016            2        22.8        1.0    8,292

/dev/vg10xp/rls_2g_vol107

7,567            2         9.8        1.0    8,058

/dev/vg10xp/rls_2g_vol108

5,456            1        46.7        1.0    6.180

/dev/vg10xp/rls_2g_vol109

5,925            2        57.3        1.0    6,265

/dev/vg10xp/rls_2g_vol110

10,462            3       147.7        1.0    6,867

/dev/vg10xp/rls_2g_vol111

6,071            2       130.0        1.0    5,638

/dev/vg10xp/rls_2g_vol112

15,624            4       226.9        1.0   15,736

/dev/vg10xp/rls_2g_vol112

14,421            4       206.2        1.0   17.136

/dev/vg10xp/rls_2g_vol112

13,677            4       229.9        1.0   11.828

...

可以看出/dev/vg10xp 上部分文件的平均读相应时间超过了200ms,存在严重的性能问题。通过验证,/dev/vg10xp是c55t14d1上的逻辑卷。

STATSPACK 报告之I/O问题分析

I/O性能分析是STATSPACK 分析中的重要部分。对于I/O的分析可以基于两个方面,第一个方面是在Wait Events for DB中,比如下面的数据

Avg

Total wait        wait            waits

Events                            waits      Timeouts          time(s)        (ms)              /txn

db file sequential             13,409,809           0           424,347         29              93.6

SQL*NET more data to client     1,187,633           0             8,024          7               7.7

buffer busy waits                 212,482           0             5,888         28               1.4

db file scatter read              143,778           0             3,154         22               0.9

从上面看,db file sequential read(29ms) 和 db file scatter read(22ms) 的等待时间都很高,说明I/O存在明显的性能

问题。对于不同的系统,这些值的正常范围都不大相同,可以通过长期的积累,形成基线数据。不过,一般来说超过10ms就应该关注了,超过20ms,I/O子系统就可能存在问题了。从本例来说,系统的I/O性能存在一定的问题。为了确定猜测,可以进一步检查文件I/O详细信息:

File IO Stats DB:HSCP Instance :hcsp Snaps :21 - 33

->ordered by Tablespace,File

Tablespace                         Filename

-----------------------   -----------------------------------------------------------------------

Av          Av      Av                           Av              BUFFER     Av  Buf

Reads        Reads/s     Rd(ms)   Blks/Rd           Writes   Writes/s              Waits      Wt(ms)

-------------    -------     ------   -------    -------------   --------       ------------   ---------

HAIER_TEST_DATA              /dev/vgrac/rhaier_test_data02

132            0        163.6     2.5               65        0                   0

HCSP_AI_DATA                 /dev/vgrac/rHCSP_AI_DATA_01

1,363            0         19.1     1.0            1,349        0                  0

HCSP_AI_INDEX                /dev/vgrac/rHCSP_AI_INDEX_01

4,649            1         17.5     1.0            3.614        0                  2          0.0

HCSP_BASE_DATA               /dev/vgrac/rhcsp_base_data01

329,857           38         14.3     2.8          77,415         9              33,510         11.2

HCSP_BASE_INDX               /dev/vgrac/rhscp_base_index01

72,577            8         14.7     1.0             419         0                 111          3.2

HCSP_COMM_DATA               /dev/vgrac/rhcsp_comm_data01

7,789             1        112.1     2.7             692         0               3,884          87.5

从上面的数据可以看出,大多数的文件访问的平均读响应时间都超过20ms.基本上我们可以得出结论,系统的I/O存在问题。

oracle 老白,老白对oracle性能的io调优--(摘自老白-一个金牌DBA的故事)相关推荐

  1. oracle优化日记_Oracle优化日记:一个金牌DBA的故事

    金牌DBA精彩纷呈的经历 86个优化技巧活学活用 培养多种能力,保障职场成功 恩墨科技创始人.Oracle ACE Director盖国强倾力推荐 白鳝,本名徐戟,国内资深Oracle数据库优化专家, ...

  2. 性能监控与调优篇之【3. JVM 监控及诊断工具-GUI 篇】

    文章目录 3. JVM 监控及诊断工具-GUI 篇 3.1. 工具概述 3.2. JConsole 3.3. Visual VM 3.4. Eclipse MAT 3.5. JProfiler 3.6 ...

  3. <JVM下篇:性能监控与调优篇>03-JVM监控及诊断工具-GUI篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  4. JVM(四)_性能监控与调优

    不定期补充.修正.更新:欢迎大家讨论和指正 本文主要根据尚硅谷的视频学习,建议移步观看,其他参考资料会在使用时贴出链接 尚硅谷宋红康JVM全套教程(详解java虚拟机) 由于JVM的知识是互相穿插的, ...

  5. Java虚拟机|JVM知识点汇总及简述->性能监控与调优

    性能监控与调优 前言 这里学完整章后选择一到两个工具使用熟练,个人推荐Visual VM和Arthas搭配熟练使用 一.概述 1.性能评价/测试指标 1.1 停顿时间(响应时间) 提交请求和返回该请求 ...

  6. plm服务器 硬件性能,如何对PLM系统进行性能诊断与调优?

    原标题:如何对PLM系统进行性能诊断与调优? PLM系统是企业最重要的信息系统之一,尤其对于研发人员,PLM系统更是日常工作中非常重要的一环.随着时间的推移,企业对PLM系统的相关应用越来越深入,一方 ...

  7. 【虫师--系列20】性能测试知多少---性能分析与调优的原理

    转自: http://www.cnblogs.com/fnng/archive/2013/03/19/2970315.html   作者:虫师 最近一直纠结性能分析与调优如何下手,先从硬件开始,还是先 ...

  8. JAVA生产环境验证_Java生产环境下性能监控与调优详解

    本课程将为你讲解如何在生产环境下对Java应用做性能监控与调优:通过本课程,你将掌握多种性能监控工具应用,学会定位并解决诸如内存溢出.cpu负载飙高等问题:学会线上代码调试,Tomcat.Nginx, ...

  9. 性能测试分析与性能调优诊断--史上最全的服务器性能分析监控调优篇

    来源: https://www.cnblogs.com/laoqing/p/11629941.html 一个系统或者网站在功能开发完成后一般最终都需要部署到服务器上运行,那么服务器的性能监控和分析就显 ...

最新文章

  1. 为什么比尔盖茨,马斯克、霍金都提醒你:要警惕人工智能?(上)
  2. LNMP 环境遇到的权限问题
  3. CGAffineTransform
  4. Python练习题:3 猜数游戏
  5. Android SDK开发包下载地址
  6. AFNetWorking 之 网络请求的基本知识
  7. 飞信php接口 web service
  8. 如何在线免费caj转word
  9. 计算机键盘灯光怎么关闭,如何关闭机械键盘的灯[图形介绍]
  10. Johnson-Trotter算法求全排列
  11. java 蓝牙_PC平台上JAVA蓝牙通信实现方法
  12. ArcGIS Enterprise部署介绍
  13. 解决 SecureCRT 和 SecureFX 中文乱码
  14. Python如何在函数内部使用全局变量
  15. Vue 引入腾讯地图 API 与实际应用保姆级分享
  16. 【找不到SQL Server ODBC 驱动程序的安装例程】的解决
  17. gateway+nacos获取不到服务列表报503
  18. I/O设备和设备控制器
  19. 右键点击文件显示多余菜单删除
  20. Android触摸事件传递分析与实践

热门文章

  1. 将knif4j快速集成到springboot项目中
  2. 关于灰色关联分析以及灰色预测初步理解
  3. EAI技术和概念解析
  4. java程序设计之网络编程基础教程_Java程序设计之网络编程基础教程
  5. 使用BeautifulSoup爬网页指定内容
  6. mysql相关的dll_libmysql_d.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
  7. GeoGebra 数列极限
  8. 默默前行的livego--基于go语言的rtmp直播服务器
  9. java继承a mya new c,【转】Android应用程序完全退出
  10. linux 命令缓存机制(命令:hash) | hash -r使用场景和作用