标签:
再好的算法、实现。最终还是要来进行IO
使用的是传统的机械硬盘,存储大数据时还行,但是数据库内容获取就实在是差到一个境界了。特此进行一番探索:
磁盘 性能:
在了解磁盘 I/O 监控命令iostat前,我们需要了解磁盘 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
昨天碰到一处问题,POSTGRES 持续占用一个CPU运行时间,开始以为是性能在io上面,查看后,发现R/S 仅在0.7M/S左右。
可以排除IO,转向查询语句优化。
学习的初衷是解决IO过慢的问题,观察后发现问题在于PSQL 父表的查询无法应用于子表的索引导致的。。。
标签:
原文地址:http://www.cnblogs.com/yezhaohui/p/4315442.html