MSSQLSERVER_19421

适用于:SQL Server

详细信息

属性
产品名称 SQL Server
事件 ID 19421
事件来源 MSSQLSERVER
组件 SQLEngine
符号名称 HADR_AG_LEASE_RENEWAL_TIMEOUT
消息正文 托管可用性组 '%.*ls' 的 SQL Server 在租约超时期限内未收到来自 Windows Server 故障转移群集的进程事件信号。

说明

当 Windows 群集端的租约帮助程序未在预定义租约期内向 SQL Server 租用工作线程发出信号时,SQL Server 错误日志中将引发错误 19421。 具体而言,SQL Server 调用 WaitForMultipleObjects() 等待以信号状态设置租约超时事件。 如果函数返回WAIT_TIMEOUT,因为它已超过指定的租约间隔,则引发错误 19421。

租约是一种基于时间的通信机制,它出现在 SQL Server 与 Windows Server 故障转移群集 (WSFC) 进程(尤其是 RHS.EXE 进程)之间。 这两个进程会定期相互通信,以确保另一进程正在运行且在响应。 此通信使用 Windows 事件对象 进行,并确保在不知道 WSFC 的情况下不会发生 AG 资源的故障转移。 如果其中一个进程未根据预定义的租约期响应租约通信,则会发生租约超时。 有关详细信息,请参阅 租用机制。 另请参阅 工作原理:SQL Server AlwaysOn 租约超时

此错误与其他租约超时错误相关,并提供有关错误 MSSQLSERVER_19407

原因

由于 Windows 事件是轻型同步对象,因此影响它们的外部因素相对较少。 可能导致租约超时的典型问题涉及系统范围问题。 下面是可能导致租约过期并导致重启或故障转移的可能性列表:

  • 系统上 CPU 使用率高(接近 100%)
  • 内存不足条件 - 正在分页的虚拟内存和/或其中一个进程
  • 生成大型内存转储时 SQL Server 进程未响应
  • WSFC 脱机(例如仲裁丢失)

用户操作

检查 WSFC 群集中的相应可用性组资源,以查看它是否报告了任何错误。

有关详细故障排除,请参阅MSSQLSERVER_19407中的 用户操作

  • 排查高 CPU 问题
  • 排查内存不足问题
  • 减少或避免 SQL Server 或群集进程的大型内存转储
  • 检查虚拟机(VM)配置是否过度预配
  • 检查虚拟机(VM)迁移或备份是否导致问题