Use a gradual, conservative increase and keep the timeout relationships valid.
SameSubnetDelay controls how often heartbeats are sent, and SameSubnetThreshold controls how many missed heartbeats are allowed before the node is considered down. The effective same-subnet tolerance is:
SameSubnetDelay × SameSubnetThreshold
Examples from the documented defaults and recommendations:
- A default of
1000 ms × 10 gives about 10 seconds before the node is removed.
- For Azure SQL Server on Windows Server 2012 or later, Microsoft recommends relaxing to
SameSubnetThreshold = 40 with SameSubnetDelay = 1 second, which gives about 40 seconds of tolerance.
- For some Azure SAP WSFC scenarios in the same subnet, tested values are
SameSubnetDelay = 2000 and SameSubnetThreshold = 15, which gives about 30 seconds of tolerance.
Recommended approach:
- Fix the root cause first where possible. Increasing heartbeat values can stop evictions, but it can also mask the underlying SAN or network problem rather than resolve it.
- Increase values gradually, not aggressively. Microsoft guidance for Always On notes that increasing timeout values improves tolerance for transient issues but slows reaction to hard failures.
- Prefer increasing delay first, then threshold when making the cluster more tolerant. This increases the time between heartbeats and can reduce congestion while giving transient issues more time to clear.
- Do not set values below defaults. Lowering timeout values below default is not advised.
- Keep these relationships valid:
-
SameSubnetThreshold <= CrossSubnetThreshold
-
SameSubnetDelay <= CrossSubnetDelay
A practical tuning path for same-subnet nodes is:
- Start by checking current values:
Get-Cluster | fl *subnet*
- If current settings are near default and transient latency is causing evictions, first try a moderate increase such as:
(Get-Cluster).SameSubnetDelay = 2000
(Get-Cluster).SameSubnetThreshold = 15
Expected effect: about 30 seconds of same-subnet tolerance.
- If that is still not sufficient and the environment can tolerate slower failover, move toward the more relaxed pattern used for Azure SQL Server on Windows Server 2012-2019:
(Get-Cluster).SameSubnetThreshold = 40
If SameSubnetDelay remains 1000, expected effect is about 40 seconds of tolerance.
Get-Cluster | fl *subnet*
Expected output should show the updated subnet values.
Important tradeoff: higher values reduce false evictions during latency spikes, but they also delay failover during real node failures. That is the main stability risk. For that reason, changes should be incremental and based on how much additional outage detection time the workload can tolerate.
Also note that one troubleshooting article explicitly states that increasing these values to the maximum may make node removal events go away, but only masks the problem. The only real need for substantially higher values is when latency is inherent, such as multi-site deployments.