症状
此更新包括以下针对 Microsoft SQL Server AlwaysOn 租约超时可支持性的改进:
-
租约超时消息现在显示并记录当前时间和预期的续订时间。
-
为租约辅助角色添加了一条新的错误消息,明确指示租用超时的原因。
-
为租用辅助角色添加了新的扩展事件和新的环形缓冲区。 这些项清楚地指示了租用阶段。
解决方法
此问题首先在以下 Service Pack for SQL Server 中修复。
有关 SQL Server 2012 Service Pack 3 (SP3) 的详细信息,请参阅 SQL Server 2012 Service Pack 3 中修复的 bug。
Service Pack 2 for SQL Server for SQL Server 2014关于SQL Server服务包是累积的。 每个新 Service Pack 除了包含所有新修复程序外,还包含以前 Service Pack 中的所有修复程序。 建议为该服务包应用最新的 Service Pack 和最新的累积更新。 在安装最新的 Service Pack 之前,不需要安装以前的 Service Pack。 使用以下文章中的表 1 查找有关最新 Service Pack 和最新累积更新的详细信息。如何确定SQL Server及其组件的版本、版本和更新级别
更多信息
为了提供更多见解,已将新的错误消息添加到SQL Server。 下表列出并说明了其中的每一个。
|
错误 |
错误消息 |
原因 |
纠正措施 |
|---|---|---|---|
|
19419 |
可用性组 '%.*ls' 与 Windows Server 故障转移群集之间的租约续订失败,因为现有租约不再有效。 |
SQL Server端的租约辅助角色未及时安排处理来自群集的事件信号。 |
检查服务器上的 CPU 使用率,因为SQL Server租用辅助角色似乎正在耗尽。 |
|
19420 |
系统明确要求可用性组 '%.*ls' 停止租约续订。 |
在使可用性组脱机时,租约续订将停止。 这仅供信息性使用。 |
|
|
19421 |
可用性组 '%.*ls' 与 Windows Server 故障转移群集之间的租约续订失败,因为续订未在租约间隔内发生。 |
群集端的租约帮助程序未及时向SQL Server租用辅助角色发出信号。 |
检查 WSFC 群集中的相应可用性组资源,以查看它是否报告了任何错误。 |
|
19422 |
可用性组 '%.*ls' 与 Windows Server 故障转移群集之间的续约失败,因为出现 windows 错误,错误代码 ('%d') 。 |
由于 windows 错误,SQL Server端的租约辅助角色无法续订租约。 |
检查 Windows 错误代码并采取纠正措施。 |
|
19423 |
可用性组 '%.*ls' 租约不再有效,无法启动租约续订过程。 |
当租约工作者开始处理联机呼叫提供的超额租约时间时,租约已过期。 这可能是由于计划问题而发生的。 |
检查服务器上的 CPU 使用率,因为SQL Server租用辅助角色似乎正在耗尽。 |
|
19424 |
可用性组 '%.*ls' 的租约辅助角色现在处于睡眠状态, (%u ms) 联机期间提供。 这只是一条信息性消息。 无需用户操作。 |
信息。 分配的额外联机时间,用于启动租约续订线程,并作为可用性组联机例程的一部分。 |
错误 19419 的示例:如果使用调试器附加到SQL Server,则会中断SQL Server进程中线程的任何服务,直到恢复SQL Server进程。 恢复SQL Server时,SQL Server错误日志中会报告以下内容:
<日期时间> 服务器错误:19419,严重性:16,状态:1。 <日期时间> 服务器Windows Server故障转移群集在租用超时期限内未收到来自托管可用性组“ag”SQL Server进程事件信号。 <日期时间> 服务器错误:19407,严重性:16,状态:1。 <日期时间> 服务器可用性组“ag”与Windows Server故障转移群集之间的租约已过期。 SQL Server 实例与 Windows Server 故障转移群集之间发生了连接问题。 若要确定可用性组是否正在正确故障转移,检查Windows Server故障转移群集中的相应可用性组资源。 <日期时间> 服务器 AlwaysOn:可用性组“ag”的本地副本 (replica) 脱机,因为租约过期或租约续订失败。 这只是一条信息性消息。 无需用户操作。 <日期时间> 服务器可用性组“ag”中本地可用性副本 (replica) 的状态已从“PRIMARY_NORMAL”更改为“RESOLVING_NORMAL”。 由于启动、故障转移、通信问题或群集错误,副本 (replica) 状态已更改。 有关详细信息,请参阅可用性组仪表板、SQL Server错误日志Windows Server故障转移群集管理控制台或Windows Server故障转移群集日志。
返回 19419 错误,因为SQL Server未响应群集服务。 还可能会收到 (19407) 以及 19419 错误的租约超时错误消息。错误 19424 的示例:下面是可用性组转换为 PRIMARY 角色之前报告的过度租用时间消息:
<日期时间> 服务器可用性组“ag”的租约辅助角色现在处于睡眠状态, (164766 ms) 联机期间提供。 这只是一条信息性消息。 无需用户操作。 <日期时间> 服务器可用性组“ag”中本地可用性副本 (replica) 的状态已从“PRIMARY_PENDING”更改为“PRIMARY_NORMAL”。 由于启动、故障转移、通信问题或群集错误,副本 (replica) 状态已更改。 有关详细信息,请参阅可用性组仪表板、SQL Server错误日志Windows Server故障转移群集管理控制台或Windows Server故障转移群集日志。
availability_group_lease_expired和hadr_ag_lease_renewal XEvents 已得到改进,并添加了提供有关租约条件的详细信息的数据点。 下表描述了对这些 XEvent 的改进:
|
XEvent |
新建列 |
说明 |
|---|---|---|
|
availability_group_lease_expired |
current_time |
租约到期的时间 |
|
availability_group_lease_expired |
new_timeout |
超时时间,当引发availability_group_lease_expired时,current_time大于 new_timeout |
|
availability_group_lease_expired |
状态 |
租约阶段:请参阅下面的租约阶段表 |
|
hadr_ag_lease_renewal |
状态 |
hadr_ag_lease_renewal |
|
hadr_ag_lease_renewal |
error_code |
如果状态为HadrLeaseRenewal_FailedWithWindowsError则error_code是与失败关联的 Windows 错误代码 |
租约阶段和定义下表列出了可能的租约阶段并说明了其功能:
|
阶段名称 |
说明 |
|---|---|
|
HadrLeaseRenewal_LeaseWorkerStarted |
租用工作线程已启动。 |
|
HadrLeaseRenewal_StartedExcessLeaseSleep |
启动超额租约。 过度租用阶段记录可用性组联机阶段期间租用线程的启动情况。 |
|
HadrLeaseRenewal_FailedExcessSleepInvalidOnlineLease |
如果租约已过期,则会使超额租约失败。 |
|
HadrLeaseRenewal_SkipExcessSleep |
如果可用于睡眠的持续时间小于租约间隔,我们将跳过超额租约。 无需通过超额租赁,只需开始握手过程。 |
|
HadrLeaseRenewal_ExcessSleepSucceeded |
超额租约成功。 |
|
HadrLeaseRenewal_RenewSucceeded |
每次续订时,我们都应该看到这一点。 |
|
HadrLeaseRenewal_LeaseNotValid |
等效于错误:19419 Windows Server故障转移群集在租用超时期限内未收到来自托管可用性组 '%.*ls' SQL Server的进程事件信号。 |
|
HadrLeaseRenewal_StopLeaseRenewal |
应在故障转移事件期间看到此事件。 |
|
HadrLeaseRenewal_LeaseExpired |
等效于错误:19421 SQL Server托管可用性组 '%.*ls' 在租用超时期限内未收到来自Windows Server故障转移群集的进程事件信号。 |
|
HadrLeaseRenewal_FailedWithWindowsError |
由于窗口错误,租约续订失败。 |
有关详细信息,请参阅 改进的 AlwaysOn 可用性组租约超时诊断。有关租约超时的详细信息,请参阅工作原理:SQL Server AlwaysOn 租约超时。
状态
Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。