如何解决 EC2 Windows 实例上的 Microsoft SQL 问题?

2 分钟阅读
0

我在 Amazon Elastic Compute Cloud(Amazon EC2)实例上运行 Microsoft SQL Server 时收到错误。或者,SQL Server 运行缓慢,导致应用程序记录超时错误。

简短描述

以下是可能在您的 SQL Server 上发生的常见错误:

  • SQL Server 实例发生故障,从主副本转移到辅助副本。
  • Event Viewer 每 15 分钟记录一次事件 1196 “Cluster network name resource 'Cluster Name' failed registration of one or more associated DNS name(s) for the following reason”。
  • 您无法创建 SQL 侦听器。
  • SQL Server 运行缓慢,导致应用程序记录超时错误。
  • 在 SQL 安装程序中检测到单独服务器的设置后,添加节点失败并出现 “invalid credentials” 错误。

解决方法

SQL Server 实例发生故障,从主副本转移到辅助副本

故障转移经常发生于底层集群组。若要确定问题是否出在群集级别,请执行以下步骤查看事件查看器中的系统日志

  1. 打开运行 应用程序,输入 eventvwr,然后选择确定
  2. 选择 Windows 日志系统。如果在日志中看到事件 1069、1146、1230 或 1135,则通过生成集群日志开始在集群级别进行调查。
    **注意:**如果看到事件 1135,则表示已发生集群节点故障转移。有关解决此问题的信息,请参阅 Microsoft 网站上的排查事件 ID 为 1135 的集群问题

若要生成和检索集群日志,请执行以下步骤:

  1. 通过在 Windows PowerShell 中运行 get-clusterlogs命令生成最新的集群日志集。
  2. C:\ windows\ cluster\ reports 的默认位置检索集群日志。

如果集群日志显示集群由于 SQL 资源而发生故障转移,请查看 Event Viewer 应用程序日志中是否存在 SQL 错误。

有关更多信息,请参阅 Microsoft 网站上的 针对 Always On 可用性组的机制以及租用、集群和运行状况检查超时指南

有关 SQL Server 服务故障的具体详细信息,请查看 SQL Server 错误日志。有关更多信息,请参阅 Microsoft 网站上 SQL Server Management Studio(SSMS)中查看 SQL Server 错误日志

Event Viewer 每 15 分钟记录一次事件 1196 “Cluster network name resource 'Cluster Name' failed registration of one or more associated DNS name(s) for the following reason”

在默认情况下,集群名称对象(CNO)每 15 分钟发送一次 DNS,以检查是否仍然存在所需的记录。如果检查失败,则会收到 “Cluster network name resource 'Cluster Name' failed” 的注册错误。此错误经常在当 CNO 对于集群中的网络名称缺少集群 DNS 记录权限时发生。

要解决此问题,应向 CNO 授予对 DNS 记录的完全控制权。在默认情况下,集群通常会在创建时授予这些权限。

如果您使用的是静态 DNS 记录,或者您不希望集群继续更新您的 DNS 记录,请按照以下步骤操作:

  1. 导航到 ncpa.cplNIC 网卡属性Ipv4 属性高级DNS
  2. 取消选中在 DNS 中注册此连接的地址

您无法创建 SQL 侦听器

如果您无法创建 SQL 侦听器,则可能需要进行其他故障排除。有关更多信息,请参阅 Microsoft 网站上的创建侦听器失败并显示消息 “The WSFC cluster could not bring the Network Name resource online”

SQL Server 运行缓慢,导致应用程序记录超时错误

验证您的 SQL Server 是否遇到内存过高、CPU 过高或磁盘瓶颈问题:
检查操作系统的内存消耗是否过高。打开任务管理器,然后选择性能选项卡。如果您看到内存消耗过高且尚未设置 SQL 内存上限,请设置此上限。有关更多信息,请参阅 Microsoft 网站上的服务器内存配置选项

如果 SQL 内存已设置上限,请访问 Windows 性能监视器(perfmon)以确定哪个应用程序正在使用内存。您可以在本地或远程设置 perfmon。有关更多信息,请参阅 Microsoft 网站上的 Windows 性能监视器概述

检查操作系统上的 CPU 是否过高。打开任务管理器,然后选择性能选项卡。或者,查看 Amazon CloudWatch 指标。访问 Windows Performance Monitor 以确定哪些应用程序正在使用内存。CPU 过高通常是由过时的驱动程序引起的。升级到最新的 PV 驱动程序版本。或者,将 AWS NVMe 驱动程序升级到最新版本。

检查服务器上的磁盘消耗是否过高、音量缓慢或 I/O 是否过高。与高 CPU 一样,过时的驱动程序可能会导致磁盘消耗。升级到最新的 PV 驱动程序版本。或者,将 AWS NVMe 驱动程序升级到最新版本。如果更新驱动程序后问题仍然存在,请配置 perfmon 以确定是什么在消耗磁盘 I/O。

若要对 SQL Server 或缓慢的数据库应用程序进行故障排除,请参阅对 Microsoft 网站上看似运行缓慢的整个 SQL Server 或数据库应用程序进行故障排除
若要解决 SQL Server I/O 缓慢的问题,请参阅 Microsoft 网站上的 I/O 问题导致的 SQL Server 性能缓慢疑难解答

在 SQL 安装程序中检测到单独服务器的设置后,添加节点失败并出现 “invalid credentials” 错误

验证以下条件之一是否属实:

  • 检测到第二个服务器详细信息后,在辅助节点上的 SQL Setup 中,SQL 代理帐户名为空。
  • 注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\ConfigurationState 有一个或多个项的值为 2。

如果上述任一情况属实,请按照以下步骤操作:

  1. 打开 Windows PowerShell,然后运行以下命令:
    $ClusterName = "YourClusterName"
    $FciClusterGroupName = "SQL Server (MSSQLSERVER)"
    Add-ClusterResourceType -Name "SQL Server Agent" -Dll "sqagtres.dll"
    
    **注意:**修改前面命令示例中的变量名称,例如 YourClusterName,使其与您的环境相匹配。
  2. 打开故障转移集群管理器,然后选择角色SQL 角色、**添加资源 **、更多资源
  3. 选择新建 SQL Server 代理属性依赖关系
  4. 资源字段中,选择 SQL 服务器
  5. 选择属性选项卡,然后在 InstanceName 字段中输入您的 SQL Server 实例的名称。然后,在 VirtualServerName 字段中输入 SQL 集群的名称。新的 SQL Server 代理将启动。
  6. 确保在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\ConfigurationState 中将所有项的值变更为 1。
  7. 再次运行安装程序。您现在可以添加节点,而不会收到凭证错误消息。

相关信息

如何在 EC2 Windows 实例上启动 Microsoft SQL Server?

如何在 EC2 Windows 实例上升级 Microsoft SQL 集群?

AWS 官方
AWS 官方已更新 8 个月前