Disk Read Latency

Microsoft.SQLServer.2014.Database.DiskReadLatencyMonitor (UnitMonitor)

Disk Read Latency monitor for 2014 DBs. Note: This monitor is disabled by default. Please use overrides to enable it when necessary.

Knowledge Base article:

Summary

The monitor checks latency for the disk read operation and throws an alert.

This alert indicates that the average time that it takes to read data from the disk has stayed greater than threshold during an interval.

Causes

The problem may be caused by a disk bottleneck or disk contention.

Resolutions

To resolve this error, do one or more of the following:

SQL Server Best Practices Article (Disk Configuration Best Practices & Common Pitfalls)

http://msdn.microsoft.com/library/cc966412.aspx#EEAA

Overrideable Parameters

Name

Description

Default Value

Enabled

 

No

Generates Alerts

 

Yes

Interval (seconds)

The recurring interval of time in seconds in which to run the workflow.

300

Number of samples

Indicates how many times a measured value should breach a threshold before the state is changed.

6

Threshold

The collected value will be compared against this parameter.

40

Timeout (seconds)

Specifies the time the workflow is allowed to run before being closed and marked as failed.

200

Element properties:

TargetMicrosoft.SQLServer.2014.Database
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledFalse
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2014.Database.DiskReadLatency.MonitorType
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL 2014: Disk read latency is too high
The database "{0}" in SQL instance "{1}" on computer "{2}" mount point "{3}" has too high disk read latency "{4}". See "Alert Context" tab for more details.
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2014.Database.DiskReadLatencyMonitor" Accessibility="Public" Enabled="false" Target="SQL2014Core!Microsoft.SQLServer.2014.Database" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2014.Database.DiskReadLatency.MonitorType" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2014.Database.DiskReadLatencyMonitor.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.Database"]/DatabaseName$</AlertParameter1>
<AlertParameter2>$Target/Host/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.ServerRole"]/InstanceName$</AlertParameter2>
<AlertParameter3>$Target/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</AlertParameter3>
<AlertParameter4>$Data/Context/ObjectName$</AlertParameter4>
<AlertParameter5>$Data/Context/Value$</AlertParameter5>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Normal" MonitorTypeStateID="Normal" HealthState="Success"/>
<OperationalState ID="Error" MonitorTypeStateID="Error" HealthState="Error"/>
</OperationalStates>
<Configuration>
<IntervalSeconds>300</IntervalSeconds>
<TimeoutSeconds>200</TimeoutSeconds>
<Threshold>40</Threshold>
<NumSamples>6</NumSamples>
</Configuration>
</UnitMonitor>