首页 > 代码库 > 磁盘性能监控

磁盘性能监控

对磁盘 I/O 活动的监控可通过如下几个性能计数器来度量:

 Counter Name 

Description

 Avg. Disk sec/Read

 Shows the average time, in seconds, of a read of data from the disk.

 Avg. Disk sec/Write   

 Shows the average time, in seconds, of a write of data to the disk.

 Disk Transfers/sec 

 Shows the rate of read and write operations on the disk.

 Disk Bytes/sec

 Shows the rate at which bytes are transferred to or from the disk during write or read operations.

 Avg. Disk Queue Length  

 Shows the average number of both read and write requests that were queued for the selected disk during the sample interval. 

  • PhysicalDisk 相关的性能计数器主要针对物理磁盘,如果同一物理磁盘上有多个分区,则该计数器计算的是所有分区的和。
  • LogicalDisk 相关的性能计数器主要针对逻辑分区,通过挂载点或磁盘驱动器号来指定,而不是监控整个磁盘。

其中,Avg. Disk sec/Read 和 Avg. Disk sec/Write 是两个主要考量磁盘 I/O 性能的计数器,它们不需要额外的信息作为参考,可以直接判断 I/O 请求的平均延迟。

Avg. Disk sec/Read

描述从磁盘对数据进行一个读操作所需的平均时间(单位:秒)。

Avg. Disk Sec/Read is the average time in seconds of a read of data from the disk.

下面列出了参数值范围所代表的意义:

 Range 

Represent

少于 10 ms

  很好

 在 10-20 ms 之间   

  还可以

在 20-50 ms 之间  

  有点慢,需要注意 

大于 50 毫秒

  有严重的 I/O 瓶颈    

这里列出的数字均为一般参考,对于有特殊需求的应用,对磁盘参数会有更高的要求。

Avg. Disk sec/Write

描述了从磁盘对数据进行一个写操作所需的平均时间(单位:秒)。

Avg. Disk Sec/Write is the average time in seconds of a write of data to the disk.

下面列出了参数值范围所代表的意义:

 Range 

Represent

少于 10 ms

  很好

 在 10-20 ms 之间   

  还可以

在 20-50 ms 之间  

  有点慢,需要注意 

大于 50 毫秒

  有严重的 I/O 瓶颈    

实际上,参数范围含义与 Avg. Disk sec/Read 是类似的。

如果大多数磁盘驱动器出现比较高的延迟,则瓶颈可能出现在通信介质(Communication Medium),例如 SAN HBA、交换机、光纤、前端适配器 CPU 和缓存等。如果只有一个或少数几个驱动器出现延迟,则瓶颈通常会是磁盘组(JBOD:Just a Bunch of Disks),进一步调查则需要查看指定磁盘驱动器上的其他计数器的值。

JBOD (for "just a bunch of disks," or sometimes "just a bunch of drives") is an array of hard disks that haven‘t been configured according to the RAID (redundant array of independent disks) system.

Disk Transfers/sec

Disk Bytes/secDisk Transfers/sec 两个性能计数器常被用来观测 I/O 请求的规模和数量,用以判断是否是 JBOD 问题还是通信介质问题,然后通过 Avg. Disk Queue Length 计数器来判断是否是通信介质问题。

Disk Transfers/sec 实际上是由 Disk Reads/secDisk Writes/sec 两个计数器组成。

Disk Transfers/sec = Disk Reads/sec + Disk Writes/sec

通过上面的计数器的值可以判断是否驱动器没有足够的磁盘支撑,以判断在给定数量磁盘上所做的 RAID 是否合理。可以根据下表中列出的公式来计算应该使用哪种 RAID 类型。

 RAID Type 

I/Os per Disk

 RAID 0

  (reads + writes) / number of disks

 RAID 1

  [reads + (2 * writes)] / 2

 RAID 5  

  [reads + (4 * writes)] / number of disks 

 RAID 10 

  [reads + (2 * writes)] / number of disks    

例如:通常,一个 15000 RPM(每分钟转数,Revolutions Per Minute)的磁盘的能力大概是 180 IOPS(I/O requests per second)左右。如果 Disk Transfers/sec 的最大值是 1800,则有 1800/180 = 10,那么驱动器至少需要 10 个 15000 RPM 的磁盘组成 RAID 组。

如果判断延迟是由于磁盘数量问题导致,则可以考虑如下方案:

  • 使用更快的磁盘。
  • 将频繁访问的文件移动到单独的磁盘。
  • 向 RAID 阵列中添加更多的磁盘。
  • 使用更快的 RAID 类型。
  • 停止与其他卷共享磁盘。

如果判断延迟是由于传输介质问题导致,则可以考虑如下方案:

  • 将频繁访问的文件移动到单独的磁盘。
  • 验证 SAN 的高速缓存。
  • 使用多种渠道。

参考资料

  • Monitoring Disk Usage
  • Windows Performance Monitor Disk Counters Explained
  • Top Six FAQs on Windows 2000 Disk Performance
  • Troubleshooting Slow Disk I/O in SQL Server
  • PhysicalDisk Object
  • Creating a custom performance monitor counter for SQL Server
  • How to use the SQLIOSim utility to simulate SQL Server activity on a disk subsystem

本文《磁盘性能监控》由 Dennis Gao 发表自博客园,未经作者本人同意禁止任何形式的转载,任何自动或人为的爬虫转载行为均为耍流氓。

磁盘性能监控