我一直在尝试真正弄清楚我的数据库服务器阵列上的 IOPS 是多少,看看它是否太多了。该阵列是 RAID 5 中的四个 72.6gb 15k rpm 驱动器。要计算 RAID 5 的 IOPS,请使用以下公式:(reads + (4 * Writes)) / Number of disks = total IOPS
. 公式来自MSDN。我还想计算平均队列长度,但我不确定他们从哪里得到公式,但我认为它在该页面上读取为avg que length/number of disks = actual queue
.
为了填充该公式,我使用 perfmon 来收集所需的信息。我想出了这个,在正常的生产负载下:(873.982 + (4 * 28.999)) / 4 = 247.495
. 磁盘队列长度也是14.454/4 = 3.614
.
所以对于这个问题,我认为这个阵列有一个非常高的磁盘 IO 是错误的吗?
编辑
今天早上我有机会在正常/高负载下再次查看它。这次有更大的数字和超过 600 的 IOPS 大约 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/它非常适合将数据分解成可用的东西。
我自己最近一直在这方面做一些研究。这里有一个很棒的计算器,这个网站上的人给我指了指。以 97:3 的读写比率将一些基本数字放入其中,并且不考虑缓存命中,看起来您的阵列应该能够以 4k 的速度机械地提供大约 675 IOPS。您每秒进行 902 次传输,这会很高,因为每个磁盘的队列长度也表明了这一点。
您还可以测量 sec/Transfer 和 %Disk 时间。我发现 RAID 阵列的 %Disk time 相当奇怪,并且我发现测量 %Idle 时间然后使用公式 100 - %Idle 来计算繁忙时间更准确。我敢打赌,您会发现您的磁盘非常繁忙,并且您会看到很多 20 毫秒以上的传输时间。如果您想得出磁盘问题的结论,IMO 这些数字会更加明确。
这是一篇很棒的文章,被引用了很多。它过时但相关,对于解释为什么 %Disk time 和 Avg 尤其有用。队列长度可能难以解释。