症状
此更新包含对 Microsoft SQL Server AlwaysOn 租约超时支持的以下改进:
-
租约超时消息现在将显示并记录当前时间和预期续订时间。
-
为租赁工作人员添加了一条新的错误消息,显然表明租赁超时的原因。
-
添加了一个新的扩展事件和一个新的租赁工作者的环形缓冲区。 它们清楚地表明了租赁阶段。
解决方案
此问题首先已在 SQL Server 的以下 Service Pack 中修复。
有关 SQL Server 2012 Service Pack 3 (SP3)的详细信息,请参阅 在 SQL server 2012 Service Pack 3 中修复的 bug。
SQL server 的 Service Pack 2 (适用于 sql Server 2014)关于 SQL Server 的 Service packService Pack 具有累积性。 每个新 Service Pack 除了包含所有新修复程序外,还包含以前 Service Pack 中的所有修复程序。 我们建议为该服务包应用最新的服务包和最新的累积更新。 在安装最新的 Service Pack 之前,不需要安装以前的 Service Pack。 使用以下文章中的表1查找有关最新服务包和最新累积更新的详细信息。如何确定 SQL Server 及其组件的版本、版本和更新级别
更多信息
为了提供更多洞察力,已将新的错误消息添加到 SQL Server。 下表列出并解释了其中每一个。
错误 |
错误消息 |
原因 |
纠正措施 |
---|---|---|---|
19419 |
可用性组 ' %1! ' 和 Windows Server 故障转移群集之间的租约续订失败,因为现有租约不再有效。 |
SQL Server 端的租约工作者没有按时安排处理来自群集的事件信号。 |
检查服务器上的 CPU 使用率,因为 SQL Server 租用工作人员似乎 starving。 |
19420 |
已明确要求可用性组 ' %1! ' 停止续订租约。 |
将可用性组脱机时,将停止租约续订。 这仅是信息性的。 |
|
19421 |
可用性组 ' ' %1! ' 和 Windows Server 故障转移群集之间的租约续订失败,因为未在租约时间间隔内续订。 |
群集端的租约帮助程序在时间上未向 SQL Server 租约工作者发出信号。 |
检查 WSFC 群集中对应的可用性组资源以查看是否报告了任何错误。 |
19422 |
由于出现 Windows 错误("% d"),在可用性组 ' ' %1! ' 和 Windows Server 故障转移群集之间续订租约失败。 |
由于 windows 错误,SQL Server 端上的租约工作人员无法续订租约。 |
请检查 windows 错误代码并采取纠正措施。 |
19423 |
可用性组 ' %1! ' 租约的租赁不再有效,无法开始租约续订过程。 |
当租约工作者开始处理在线呼叫提供的多余租约时间时,租约已过期。 这可能是由于安排问题所导致的。 |
检查服务器上的 CPU 使用率,因为 SQL Server 租用工作人员似乎 starving。 |
19424 |
可用性组 ' ' %1! ' ' 的租约工作者现在正在休眠在联机期间提供的多余租约时间(% 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" 的本地副本将处于脱机状态,因为租约过期或租约续订失败。 这只是一条信息性消息。 无需用户操作。 <日期时间> 服务器可用性组 "ag" 中的本地可用性副本的状态已从 "PRIMARY_NORMAL" 更改为 "RESOLVING_NORMAL"。 由于启动、故障转移、通信问题或群集错误,副本状态已更改。 有关详细信息,请参阅可用性组仪表板、SQL Server 错误日志、Windows Server 故障转移群集管理控制台或 Windows Server 故障转移群集日志。
返回19419错误,因为 SQL Server 没有响应群集服务。 你还可能会收到租约超时错误消息(19407)以及19419错误。错误19424的示例:以下是在可用性组转换为主角色之前报告的多余租约时间消息:
<日期时间> 服务器可用性组 "ag" 的租约工作者现在已休眠在联机期间提供的多余租约时间(164766 ms)。 这只是一条信息性消息。 无需用户操作。 <日期时间> 服务器可用性组 "ag" 中的本地可用性副本的状态已从 "PRIMARY_PENDING" 更改为 "PRIMARY_NORMAL"。 由于启动、故障转移、通信问题或群集错误,副本状态已更改。 有关详细信息,请参阅可用性组仪表板、SQL Server 错误日志、Windows Server 故障转移群集管理控制台或 Windows Server 故障转移群集日志。
Availability_group_lease_expired和hadr_ag_lease_renewal XEvents 已得到改进,其中添加了可提供有关租赁条件的详细信息的数据点。 下表介绍了这些 XEvents 的改进:
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 |
等效于错误: 19419Windows Server 故障转移群集在租约超时期限内未收到来自 SQL Server 托管可用性组 ' %1! ' 的进程事件信号。 |
HadrLeaseRenewal_StopLeaseRenewal |
你应该在故障转移事件期间看到此内容。 |
HadrLeaseRenewal_LeaseExpired |
等效于错误:托管可用性组 ' ' %1! ' 托管的19421SQL 服务器未在租约超时期限内收到来自 Windows Server 故障转移群集的进程事件信号。 |
HadrLeaseRenewal_FailedWithWindowsError |
由于 windows 错误,租赁续订失败。 |
有关详细信息,请参阅 改进的 AlwaysOn 可用性组租约超时诊断。有关租约超时的详细信息,请参阅 它的工作原理: SQL Server AlwaysOn 租约超时。
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。