我一直在尝试真正弄清楚我的 DB 服务器阵列上的 IOPS 是多少,看看它是否太多了。该阵列是 RAID 5 中的四个 72.6gb 15k rpm 驱动器。要计算 RAID 5 的 IOPS,请使用以下公式:(reads + (4 * Writes)) / Number of disks = total IOPS
。该公式来自微软。我也想计算平均队列长度,但我不确定他们从哪里获得公式,但我认为它在该页面上显示为avg que length/number of disks = actual queue
。
为了填充该公式,我使用了 perfmon 来收集所需的信息。在正常生产负载下,我得出了以下结论:(873.982 + (4 * 28.999)) / 4 = 247.495
。此外,磁盘队列长度为14.454/4 = 3.614
。
那么对于这个问题,我认为这个阵列具有非常高的磁盘 IO 是错误的吗?
编辑
今天早上我有机会在正常/高负载下再次对其进行了测试。这次的数字更大,IOPS 超过 600 持续了大约 5 分钟,然后又下降了。但我还查看了Avg sec/Transfer
、%Disk Time
和%Idle Time
。这些数字是在每秒读取/写入次数分别为 332.997/17.999 时获取的。
%磁盘时间:219.436
%空闲时间:0.300
平均磁盘队列长度:2.194
平均磁盘秒/传输:0.006
页/秒:2927.802
%处理器时间:21.877
再次编辑
看起来我已经解决了这个问题。谢谢你的帮助。此外,对于一个非常巧妙的解析器,我发现了这一点:http://pal.codeplex.com/它可以很好地将数据分解为可用内容。
答案1
我最近也在这个领域做了一些研究。有一个很棒的计算器这里该网站的人们向我指出了这一点。将一些基本数字放入其中,读写比率为 97:3,不考虑缓存命中率,看起来您的阵列应该能够在 4k 下机械地提供大约 675 IOPS。您每秒进行 902 次传输,这将是很高的,因为每个磁盘的队列长度也表明了这一点。
您还可以测量 sec/Transfer 和 %Disk 时间。我发现 RAID 阵列的 %Disk 时间相当奇怪,而且我发现测量 %Idle 时间然后使用公式 100 - %Idle 计算繁忙时间更为准确。我敢打赌您会发现您的磁盘非常繁忙,并且您会看到很多 20ms+ 的传输时间。在我看来,如果您想断定您遇到了磁盘问题,这些数字更明确。
这是一篇很棒的文章这篇文章被引用了很多次。虽然有些过时,但很有价值,尤其有助于解释为什么 %Disk time 和 Avg. Queue Length 很难解释。