oracle定位的方法,Oracle DBA 应知应会 -- 定位IO性能问题的一些方法

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

影响Oracle数据库IO性能的问题覆盖面十分广,根据笔者多年从事Oracle数据库管理的经验,以下几个方面是影响数据库IO性能的主要问题:

l 存储性能瓶颈:控制器不足、CACHE偏小,CACHE设置不合理、IO通道容量不足等

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

l 使用了不合理的RAID模式

l 在使用RAID的情况下,存在IO热点,多个热点文件使用同一个磁盘

l 异步IO配置不正确

l 数据库各种缓冲区设置不合理,缓冲命中率过低

l PGA的各种缓存设置过小(对于9i使用自动管理模式情况下,PGA设置过小),导致大量临时表空间操作

l REDO LOG存在性能瓶颈

l REDO BUFFER设置不合理

l 存在热点数据

l 表空间碎片严重

l 表和索引的存储参数不合理

l 行迁移比较严重

l 存在大量大表扫描的SQL

l SQL执行选择了不好的执行计划

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

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

$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比较大,那么说明可能存在IO等待的现象,通过sar命令或者iostat命令可以进一步确认。如果sar命令监控的时候发现wio比较大(比如超过40,这个值是个经验值,根据不同的系统,这个值可以调整),那么基本上可以确定存在IO性能瓶颈。如下:

$sar 1 10

HP-UX cuyn16 B.11.11 U 9000/800 11/01/05

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

15:01:45 16 3 57 24

15:01:46 15 2 59 24

15:01:47 21 3 57 19

15:01:48 20 2 63 16

15:01:49 17 2 67 14

15:01:50 12 1 75 12

15:01:51 16 2 75 7

15:01:52 10 1 84 5

15:01:53 18 2 79 1

15:01:54 25 3 65 6

如果发现wio值长时间高于40那么说明IO等待比较严重。此时可以通过sar-d命令来监控,到底哪些IO设备存在性能问题。如果发现某个设备的繁忙度长时间超过90%,那就说明该设备比较繁忙,如果该设备明avserv比较大或者比其它设备高很多.那么就说明该设备存在性能问题。

比如下面的例子:

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 c55t10d7 68.33 0.52 23 2909 5.60 72.40

Average c55t11d0 31.07 1.14 25 1630 10.95 28.05

Average c55t11d2 16.98 0.51 22 3075 5.24 13.39

Average c55t11d3 71.83 2.59 26 1643 42.18 82.78

Average c55t11d5 76.12 0.50 23 3012 5.58 76.47

Average c55t11d6 30.57 1.02 26 1637 10.85 30.59

Average c55t12d0 21.48 0.50 20 2826 5.12 19.55

Average c55t12d1 80.72 2.74 29 1880 42.78 84.38

Average c55t12d3 70.03 0.52 23 2887 5.83 66.85

Average c55t12d4 23.58 1.74 27 1758 16.11 25.72

Average c55t14d0 80.62 0.50 66 975 4.83 12.38

Average c56t14d2 5.89 0.50 6 75 5.67 10.38

Average c55t11d1 80.22 0.50 22 1547 4.85 75.33

Average c55t11d4 24.08 0.50 26 1829 5.04 11.90

Average c55t11d7 82.72 0.50 23 1586 5.27 76.46

Average c55t12d2 24.18 0.50 18 1304 4.79 16.26

Average c55t12d5 76.02 0.50 20 1403 4.91 74.11

Average c55t14d1 100.00 54.57 104 6630 1315.98 71.54

Average c55t13d1 77.72 0.55 19 297 5.79 80.19

Average c55t1d4 0.30 0.50 1 10 7.02 1.50

Average c55t2d0 0.10 0.50 0 3 3.59 6.43

Average c55t6d2 0.30 0.50 0 6 5.17 7.09

Average c55t0d7 0.70 0.50 0 2 1.33 69.67

Average c55t12d6 0.10 0.50 0 0 0.98 9.41

Average c55t13d0 0.50 0.50 0 4 7.46 19.99

从上面的数据可以看出,部分设备(比如c55t14d1)的等待队列比较长,并且AVWAIT+AVSERV的时间比较长.说明该设备存在性能瓶颈.而大部分逻辑卷的AVWAIT+AVSERV还比较正常,这说明存储系统并不存在普遍性的性能瓶颈,性能瓶颈主要集中在热点盘组上.

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

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

Top 5 Timed Events

Event Waits Time (s) Ela Time

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

db file sequential read 661,802 45,404 60.79

SQL*Net more data from dblink 3,180,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%以上.这是一个典型的IO存在性能瓶颈的例子,通过Statspack报告文件IO性能分析数据中,可以进一步检查到底哪些文件出现了问题:

INDEX_SPACE_OTHER /dev/vg10xp/rls_2g_vol05

9,171 2 52.2 1.0 7,911

/dev/vg10xp/rls_2g_vol06

8,016 2 22.8 1.0 8,292

/dev/vg10xp/rls_2g_vol07

7,567 2 9.8 1.0 8,058

/dev/vg10xp/rls_2g_vol08

5,456 1 46.7 1.0 6,180

/dev/vg10xp/rls_2g_vol09

5,925 2 57.3 1.0 6,265

/dev/vg10xp/rls_2g_vol10

10,426 3 147.7 1.0 6,867

/dev/vg10xp/rls_2g_vol11

6,071 2 130.0 1.0 5,638

/dev/vg10xp/rls_2g_vol12

1,738 0 213.9 1.0 3

/dev/vg10xp/rls_2g_vol13

3,334 1 114.4 1.0 3,596

/dev/vg10xp/rls_2g_vol14

10,758 3 213.6 1.0 13,657

/dev/vg10xp/rls_2g_vol15

15,624 4 226.9 1.0 15,736

/dev/vg10xp/rls_2g_vol16

14,421 4 206.2 1.0 17,136

/dev/vg10xp/rls_2g_vol17

13,677 4 229.9 1.0 13,819

/dev/vg10xp/rls_2g_vol18

10,554 3 212.6 1.0 11,828

/dev/vg10xp/rls_2g_vol19

7,510 2 200.6 1.0 9,965

/dev/vg10xp/rls_2g_vol20

6,134 2 198.3 1.0 7,783

/dev/vg10xp/rls_2g_vol21

5,753 2 217.6 1.0 839

/dev/vg10xp/rls_2g_vol22

4,908 1 202.3 1.0 575

/dev/vg10xp/rls_2g_vol23

16,341 4 236.4 1.0 6,470

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 由于ARCHIVE挂起导致数据库挂死 2 NIT文件中SGA区设置太大,导致内存不够用,数据库和系统都挂死 3 由于临时表空间无法扩展导致数据库被挂起 4由于未打补丁导致RMAN备份时将数据库挂起 5由于BLOB类型的表记录数太多操作又太频繁导致数据库效率急差 6由于未对特大表(达到或超过100万条记录)定期做表分析导致数据库操作特别慢 7由于空间不够导致插入数据时扩展索引失败 8由于REDOLOG破坏导致数据库异常 9由于控制文件被破坏导致数据库无法正常启动 10由于数据文件丢失或破坏导致数据库无法正常启动 11由于空间参数设置不合理导致扩展表空间、索引等失败 12由于时间格式的环境变量设置问题导致话单无法入库 13由于大事务未使用大回滚段导致事务挂起 14由于数据库连接数太多导致服务器进程数多或内存耗尽 15由于使用了MTS方式,导致数据库操作特别慢(包括备份) 16由于存在一个大事务操作,导致数据库性能特别差或产生频繁日志切换 17由于没有COMMIT,导致数据库表被锁住 18索引创建不合理,导致数据库查询特别慢 19 由于BUFFER参数设置不合理导致EXP失败 20由于EXP不向上兼容,语言不兼容,导致不同版本、不同字符集的数据库无法导入 21 由于创建表空间时误将其创建在以‘本地管理’,导致在表空间上的所有对象无法修改其存储参数 22 错误地在系统表空间上建无关的数据文件 23 ORACLE客户端在P4上安装不成功 24由于LISTENER.ORA或TNSNAMES.ORA配置问题导致网络问题 25由于环境变量设置问题导致VERSOIN版本启动问题 26用户数据、表破坏下的数据恢复 27 由于OS层问题导致数据库ORA-600错误 .....

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值