一 前言
最近做数据库服务器的压测,观察数据库性能,同时也要关注磁盘的io具体表现。分析数据时会用到2个工具 iostat,本文重新温习一下该工具的用法。
二 iostat
在排查分析io问题时,可以使用iostat查看磁盘的IO性能状态数据。
2.1 参数介绍
iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [ interval [ count ] ]
常用参数
2.2 输出解释
常使用命令
iostat -kx 1
这里重点说一下 await ,svctm
关于 await和svctm
可以理解为IO请求的响应时间,包括队列等待时间和服务时间,我们分析IO问题时,如果await大于svctm,await-svctm差值越小,则说明队列时间越短, 反之差值越大,队列时间越长,说明磁盘io有性能问题。
需要注意到是
man 手册里面有注释 Warning! Do not trust this field any more. This field will be removed in a future sysstat version. 该参数的计算方式依赖 util,而util其实不一定准确。因为util的计算方式未考虑并行处理io请求。详细的介绍请参考 《辩证看待 iostat》
2.3 常用命令
每隔2秒,显示一次设备统计信息, 可以看到全部设备的tps.
iostat -d -k 1
查看指定设备 sdb磁盘的io统计信息,每秒展示一次输出。
iostat -xk sdb 1
2.4 await多大才算有问题
如前面介绍所说,await是单个I/O所消耗的时间,包括硬盘设备处理I/O的时间和I/O请求在kernel队列中等待的时间,正常情况下队列等待时间可以忽略不计,姑且把await当作衡量硬盘速度的指标吧,那么多大算是正常呢?对于SSD,从0.0x毫秒到1.x毫秒不等。在以下实例中,sdb是10块960G SSD做raid5,await是0.36毫秒,符合预期。
对磁盘阵列来说,因为有硬件缓存,写操作不等落盘就算完成,所以写操作的service time大大加快了,如果磁盘阵列的写操作不在一两个毫秒以内就算慢的了;读操作则未必,不在缓存中的数据仍然需要读取物理硬盘,单个小数据块的读取速度跟单盘差不多。
总结
虽然说iostat输出中 util 和srctm不一定准确,我们依然可以借助await 和 avgqu-sz的值合理的分析磁盘的io情况。然后结合系统的配置比如raid 卡,磁盘IO调度策略逐步分析。
推荐阅读
容易被误读的IOSTAT
辩证看待 iostat
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/7150.html