系统IO性能参数及不同方案关注点

 再好的算法、实现。最终还是要来进行IO

使用的是传统的机械硬盘,存储大数据时还行,但是数据库内容获取就实在是差到一个境界了。特此进行一番探索:    

0 磁盘 性能:

在介绍磁盘 I/O 监控命令前,我们需要了解磁盘 I/O 性能监控的指标,以及每个指标的所揭示的磁盘某方面的性能。磁盘 I/O 性能监控的指标主要包括:

  1) 每秒 I/O 数(  [r/s w/s])- 每秒处理的请求数

  IOPS:一次磁盘的连续读或者连续写称为一次磁盘 I/O

  随机读写频繁的应用的关键衡量指标 比如主要提到的关系数据库:)

  固态硬盘的这个可以优化到恐怖的境界~可惜估计项目里是没有必要用了..  

  IOPS(每秒IO次数) = 1s/(寻道时间+旋转延迟+数据传输时间)

  可以估算一下:1W转的硬盘 IOPS :IOPS = 1000 / (3 + 60000/10000/2 + 32K / 136K) = 167  

  2) 吞吐量( [rkb/s wkb/s])- 请求大小

  Throughput: 硬盘传输数据流的速度,传输数据为读出数据和写入数据的和。

  连续请求的关键衡量指标 比如在线视频

   

  3) 平均 I/O 数据尺寸 (avgrq-sz) - 每次请求的大小

  吞吐量除以 I/O 数目, avgrq-sz < 32K 随机存取为主。 avgrq-sz > 32K  顺序存储为主

  4) 磁盘活动时间百分比( %util - 磁盘利用率

  Utilization: 磁盘在数据传输和处理命令(如寻道)处于活动状态。

  磁盘利用率与资源争用程度成正比,与性能成反比。

  5) 服务时间( svctm - 处理请求的能力

  指磁盘读或写操作执行的时间,包括寻道,旋转时延,和数据传输等时间。其大小一般和磁盘性能有关, CPU/ 内存的负荷也会对其有影响,请求过多也会间接导致服务时间的增加。如果该值持续超过 20ms,一般可考虑会对上层应用产生影响。 这里主要指的是指的是FC, SAS, SATA磁盘,转速通常为5400/7200/1W转。
  寻道时间 Tseek是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms。
  旋转延迟 Trotation是指盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常使用磁盘旋转一周所需时间的1/2表示。比如,7200 rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms,而转速为15000 rpm的磁盘其平均旋转延迟约为2ms。
  数据传输时间 Ttransfer是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前IDE/ATA能达到133MB/s,SATA II可达到300MB/s的接口数据传输率,数据传输时间通常远小于前两部分消耗时间。简单计算时可忽略。

  6) I/O 等待队列长度( avgqu-sz - 超过处理能力的请求数目

  待处理的 I/O 请求,当请求持续超出磁盘处理能力,该值将增加。

  avgqu-sz > 2 可以认为存在I/O性能问题

  7) 等待时间( await)- 请求完成耗时

  等待执行的时间, await 的大小一般取决于服务时间 (svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。

  a) : svctm ~~ await    I/O 几乎没有等待时间

  b) :  await >> svctm   I/O 队列太长,应用得到的响应时间变慢

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

根据上述的内容,再来实战看看

 新建大文件: time dd if=./test1 of=./test bs=10M count=1000

100+0 records in
100+0 records out
1048576000 bytes (1.0 GB) copied, 8.39376 s, 125 MB/s

real    0m8.496s
user    0m0.000s
sys     0m1.341s

可以看到读写速度在125M左右, 处理1G的数据,要8.5S左右

同时,使用iostat 统计磁盘IO

 iostat -d -k -x 2

-d : 显示存储设备   -k 以KB大小展示  -x 展示详细内容   -p 打印指定设备信息

这里面的参数基本上都是I/O性能的的一个方向。

比较特殊的是,rrqm、wrqm 这个字段很少看到解释,在这里翻了出来http://cherry.world.edoors.com/Cdx6RbRHlOjQ

是反馈OS的对请求处理的一个参数,指每秒将多少个逻辑请求合并为一次物理请求。

昨天碰到一处问题,POSTGRES 持续占用一个CPU运行时间,开始以为是性能在io上面,查看后,发现R/S 仅在0.7M/S左右。

可以排除IO,转向查询语句优化。

学习的初衷是解决IO过慢的问题,观察后发现问题在于PSQL 父表的查询无法应用于子表的索引导致的。。。

原文地址:https://www.cnblogs.com/amaoxiaozhu/p/2811337.html