yuhuohu 发表于 2010-02-23 22:24

磁盘IO满负荷性能分析(一)


                                                                                                有个项目最近发现在执行一些oracle数据库的数据补入的sql语句时非常慢,经查发现来自存储的硬盘io会冲到100busy
device       r/s    w/s   kr/s   kw/s wait actvsvc_t%w%b
sd2         18.2 1204.5 5480.8 9524.50.0 14.0   11.4   1 100
分析:
每秒有1K多次写,即平均来讲,每次写的时间只有1ms,或者说每1ms就要完成1次写操作
分析硬盘
存储硬盘:1W转/分。平均寻道时间3.5ms,假设10个硬盘做raid5(不太确定)
磁头平均等待时间按磁头每次都等待半圈计算,磁碟每转半圈需要的时间=60秒/10000转/2=3ms
每个硬盘的平均寻址时间=3.5ms+3ms=6.5ms
假设需求平摊到RAID5的硬盘上,按有效率提高7倍算,6.5ms/7
结论:应付每秒1千多次的随机写,存储已经满负荷了
估计得从oracle上去想办法,看能否优化查询语句或合并一些随机写请求
同一台机器,另外一组不同时刻的数据
                  extended device statistics                      tty         cpu
device       r/s    w/s   kr/s   kw/s wait actvsvc_t%w%b
sd2          0.4   79.8    3.2638.30.00.0    0.3   0   2
sd2          0.4   74.8    1.7598.30.00.0    0.3   0   2
sd2          0.2   71.4    1.6571.10.00.0    0.3   0   2
sd2          0.0   68.1    0.0543.50.00.0    0.3   0   2
sd2         36.5   62.5 30700.1500.00.00.7    7.2   043
sd2         74.9   48.8 65637.8390.70.01.6   12.6   090
sd2         45.2   87.6 42729.4701.00.01.9   14.0   093
sd2         76.6   74.4 73397.6595.00.01.5   10.1   090
这个就复杂了,读写才几十MB字节,每秒读写次数都不到100,负荷居然也满了...
尝试分析
从第一行90busy的开始
每秒种读写有123.7次,消耗的总寻址时间为120+ms,即只有880ms不到的时间用于数据读写,完成了读写70MB左右。理论最高值读写合计可达到70MB/880ms×1000ms=80MB/S
第二行 132.8,消耗132+ms,剩余870ms,完成50MB,50/870×1000=57MB/S
第三行 151.0,消耗150+ms,剩余850ms,完成80MB,80/850×1000=94MB/S
晕了,存储的磁盘RAID-5,从实际情况反推出来,最高理论值才接近100MB/S的水准??
哦对了,和阵列连接的光纤卡速率也有关系,如果光纤卡是1gb,最高吞吐量200MBps,读写同时理论值最高可达100MBps,那差不多也就才到一半嘛怎么回事?如果是2gb的和4gb的,这么低的速率明显就不对了。
光纤的速率查看:
http://en.wikipedia.org/wiki/Fibre_Channel
               
               
               
               
               
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/12442/showart_2185465.html
页: [1]
查看完整版本: 磁盘IO满负荷性能分析(一)