监视性能计数器 PhysicalDisk\Current Disk Queue Length
在多次连续采样期间,物理磁盘的“Current Queue Length”计数器始终具有高值。 因此,在此物理磁盘上,I/O 请求延迟很有可能会增加。
Current Disk Queue Length 是收集性能数据时磁盘上的未完成请求的数目。 这意味着物理磁盘无法像提出 I/O 请求那样快速接受这些请求。
物理磁盘最近出现活动大量增加的现象,此最大值导致超出了阈值,或者物理磁盘的使用率随着时间的推移稳定增大,并且最终达到一个超出阈值的点。
另一种可能就是基本物理磁盘或磁盘子系统的某个部分运行不正常或配置不正确,从而降低了物理磁盘的性能。
要进一步调查此问题,请考虑:
查看系统上的系统事件日志,看是否有指明该物理磁盘、其他物理磁盘或存储子系统问题的任何错误。
在 Operations Manager 或性能监视器中使用性能视图或报表查看此物理磁盘的当前队列长度历史记录。 这将有助于确定最近是否发生了此问题,或者在较长一段时间内活动是否稳定增加。
查看物理磁盘的其他性能计数器,如“Disk Bytes/sec”、“Disk Reads/sec”和“Disk Writes/sec”,以了解哪些类型的 I/O 在驱动整个磁盘使用率。
查看“进程”性能计数器,如“IO Data Operations/sec”,以确定系统上的整体 I/O 最明显是由哪些进程造成的。 在确定前若干个进程之后,“IO Read Operations/sec”和“IO Write Operations/sec”计数器将有助于进一步确定进程正在进行的 I/O 的类型。
根据进一步的调查结果,解决方案可能会有所不同,并且可能包含以下其中一项:
解决任何存储子系统问题或配置错误。
按比例缩小系统上发生的 I/O 的速率,或者在更多物理磁盘之间分配工作负荷。
升级驱动器或存储子系统,以处理增加的负荷。
如果增加的负荷可以接受,则可以将监视器的阈值更改为限制性较弱的值。 同样,可以增加连续采样的次数,以强制监视器仅在较长时期使用率保持相同的情况下才更改状态。
Target | Microsoft.Windows.Server.2008.PhysicalDisk | ||
Parent Monitor | System.Health.PerformanceState | ||
Category | PerformanceHealth | ||
Enabled | True | ||
Instance Name | PhysicalDisk | ||
Counter Name | Current Disk Queue Length | ||
Frequency | 300 | ||
Alert Generate | True | ||
Alert Severity | Warning | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | System.Performance.ConsecutiveSamplesThreshold | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.Windows.Server.2008.PhysicalDisk.CurrentDiskQueueLength" Accessibility="Public" Enabled="true" Target="Server2008!Microsoft.Windows.Server.2008.PhysicalDisk" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="SystemPerf!System.Performance.ConsecutiveSamplesThreshold" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.Windows.Server.2008.PhysicalDisk.CurrentDiskQueueLength.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters/>
</AlertSettings>
<OperationalStates>
<OperationalState ID="OverThreshold" MonitorTypeStateID="ConditionTrue" HealthState="Warning"/>
<OperationalState ID="UnderThreshold" MonitorTypeStateID="ConditionFalse" HealthState="Success"/>
</OperationalStates>
<Configuration>
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<CounterName>Current Disk Queue Length</CounterName>
<ObjectName>PhysicalDisk</ObjectName>
<InstanceName>$Target/Property[Type="WindowsServer!Microsoft.Windows.Server.PhysicalDisk"]/PerfmonInstance$</InstanceName>
<Frequency>300</Frequency>
<Threshold>32</Threshold>
<Direction>greaterequal</Direction>
<NumSamples>12</NumSamples>
</Configuration>
</UnitMonitor>