连接重试算法,数据库整体连接重试算法
不论是初次与会议建立连接,还是中断已建立连接后重新连接,数据访问接口都遵循连接重试算法。打开连接之后,还需要一些时间完成登录的步骤。
默认的登录超时期限为15秒,建议登录超时期限至少为5秒。如果指定较短的超时期限,则可能导致连接尝试失败。
当初始伙伴名称和故障转移伙伴名称均可用时,客户端会交替使用这两个名称,反复尝试重新连接到服务器。
在第一轮连接尝试中,数据访问接口将首先尝试使用初始伙伴名称,如果连接尝试失败(或者重试时间过期)且未超过登录期限,则数据访问接口还会尝试使故障转移伙伴名称。如果连接尝试仍然失败,则进行第二轮连接尝试,还是首先尝试使用初始伙伴名称,如果尝试失败(且未超过登录期限)则使用故障转移伙伴名称。如此反复,直到登录期限超时。
第一轮每次重试时间为总登录时间的 8%;后续每轮依次递增 8%。以15秒的登录超时期限为例,前 4 轮中分配的重试时间如下:
轮次 | 比例 | 每次尝试重试的时间 |
1 | 8 % | 1.2 秒 |
2 | 16 % | 2.4 秒 |
3 | 24 % | 3.6 秒 |
4 | 32 % | 4.8 秒 |
下图说明了15秒时的重试时间。
在上例中,前三轮连接尝试耗时 14.4 秒,在登录期限超时之前仅剩下 0.6 秒的时间。在这种情况下,第4轮仅允许使用初始伙伴名称进行最后的快速连接尝试。
3.7.3 故障转移期间的重试延迟时间
如果客户端尝试连接到正在进行故障转移的伙伴,则此伙伴会立即做出响应,表明它处于不活动的状态。在这种情况下,每轮连接尝试都会比分配的重试时间更短暂,从而导致在登录期限超时之前会发生多轮连接尝试,这会增加伙伴在故障转移期间的负载。因此,这种情况下,数据访问接口将在每轮尝试之后增加短暂的重试延迟时间。
在第一轮之后,延迟时间为 100 毫秒。在接下来的3轮之后,重试延迟时间加倍,分别达到 200、400和800毫秒。由于最大的重试延时时间为1秒,因此第5轮及所有的后续轮次,重试延迟时间为1秒,直到连接尝试成功或超时。
下图说明了在手动故障转移期间重试延迟时间对连接尝试的影响。登录超时期限为15秒。
参考资料:https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms365783%28v%3dsql.105%29
转自:http://www.mssqlmct.cn/dba/?post=71