清单:有关 Azure VM 上 SQL Server 的最佳做法

适用于: Azure VM 上的 SQL Server

本文提供一个可用于快速查看有关 Azure 虚拟机 (VM) 上 SQL Server 性能优化的一系列最佳做法和指南的清单。

如需了解更全面详尽的信息,请参阅本系列中的其他文章:清单VM 大小存储安全性HADR 配置收集基线

概述

在 Azure 虚拟机上运行 SQL Server 时,继续使用适用于本地服务器环境中的 SQL Server 的相同数据库性能优化选项。 但是,关系数据库在公有云中的性能取决于许多因素,如虚拟机的大小和数据磁盘的配置。

通常需要在针对成本优化和针对性能优化之间进行权衡。 这一系列性能最佳做法侧重于实现 Azure 虚拟机上 SQL Server 的最佳性能。 如果工作负荷要求较低,可能不需要每项建议的优化。 评估这些建议时应考虑性能需求、成本和工作负荷模式。

VM 大小

下面是有关在 Azure VM 上运行 SQL Server 时应选择的 VM 大小的最佳做法的快速清单:

  • 使用具有 4 个或更多 vCPU 的 VM 大小,如 Standard_M8-4msE4ds_v4DS12_v2,或使用更大的大小。
  • 使用内存优化的虚拟机大小,以实现 SQL Server 工作负载的最佳性能。
  • DSv2 11-15Edsv4 系列和 M- 系列提供 OLTP 工作负载所需的最佳内存与 vCore 比率。 这两个 M 系列的 VM 都提供最高的内存与 vCore 比率,可满足任务关键型工作负载的需求,也非常适合用于数据仓库工作负载。
  • 对于任务关键型工作负载和数据仓库工作负载,考虑应用更高的内存与 vCore 比率。
  • 使用 Azure 虚拟机市场映像作为 SQL Server 设置,并配置存储选项以获得最佳 SQL Server 性能。
  • 收集目标工作负载的性能特征,并使用它们来确定适用于你的业务的 VM 大小。

若要了解详细信息,请参阅内容全面的 VM 大小最佳做法

存储

下面是有关在 Azure VM 上运行 SQL Server 时的存储配置的最佳做法的快速清单:

  • 在选择磁盘类型之前,监视应用程序并确定 SQL Server 数据、日志和 tempdb 文件的存储带宽和延迟要求
  • 为了优化存储性能,请规划可用的最高未缓存 IOPS,并使用数据缓存作为数据读取的性能功能,同时避免虚拟机和磁盘上限/限制
  • 将数据、日志和 tempdb 文件放在不同的驱动器上。
    • 对于数据驱动器,仅使用高级 P30 和 P40 磁盘以确保可提供缓存支持
    • 对于日志驱动器,规划容量并测试性能与成本,同时评估高级 P30 - P80 磁盘
    • 在选择最佳 VM 大小后,请将 tempdb 放置在大多数 SQL Server 工作负载的本地临时 SSD D:\ 驱动器上。
      • 如果本地驱动器的容量对 tempdb 来说不足够,请考虑增加 VM 的大小。 有关详细信息,请参阅数据文件缓存策略
  • 使用存储空间对多个 Azure 数据磁盘进行条纹化,以将 I/O 带宽增加到目标虚拟机的 IOPS 和吞吐量上限。
  • 将数据文件磁盘的主机缓存设置为只读。
  • 将日志文件磁盘的主机缓存设置为无。
    • 请不要在包含 SQL Server 文件的磁盘上启用读取/写入缓存。
    • 更改磁盘的缓存设置之前,请始终停止 SQL Server 服务。
  • 对于开发和测试工作负荷,请考虑使用标准存储。 不建议将标准 HDD/SDD 用于生产工作负载。
  • 基于额度的磁盘突发 (P1-P20) 仅应考虑用于较小的开发/测试工作负载和部门系统。
  • 预配与 SQL Server VM 位于同一区域的存储帐户。
  • 在存储帐户上禁用 Azure 异地冗余存储(异地复制)并使用 LRS(本地冗余存储)。
  • 将数据磁盘格式化,为临时 D:\ 驱动器(默认为 4 KB)以外的驱动器上放置的所有数据文件使用 64-KB 的分配单元大小。 通过 Azure 市场部署的 SQL Server VM 附带经过格式化的数据磁盘,其中分配单元大小和存储池的交错设置为 64 KB。

若要了解详细信息,请参阅内容全面的存储最佳做法

SQL Server 功能

以下是在生产环境中的 Azure 虚拟机上运行 SQL Server 实例时针对 SQL Server 配置设置的最佳做法的快速清单:

进行映射

以下是在 Azure VM 上运行 SQL Server 时 Azure 特定指南的最佳做法的快速清单:

HADR 配置

高可用性和灾难恢复 (HADR) 功能(如 Always On 可用性组故障转移群集实例)依赖于底层 Windows Server 故障转移群集技术。 查看修改 HADR 设置以更好地支持云环境的最佳做法。

对于 Windows 群集,请考虑以下最佳做法:

  • 为群集设置强度较小的参数,以避免因暂时性网络故障或 Azure 平台维护而意外中断。 若要了解详细信息,请参阅检测信号和阈值设置。 对于 Windows Server 2012 或更高版本,请使用以下建议的值:
    • SameSubnetDelay:1 秒
    • SameSubnetThreshold:40 个检测信号
    • CrossSubnetDelay:1 秒
    • CrossSubnetThreshold:40 个检测信号
  • 在可用性集中放置 VM。 若要了解详细信息,请参阅 VM 可用性设置
  • 每个群集节点使用一个 NIC,并使用一个子网。
  • 将群集仲裁投票配置为使用 3 个或更多奇数投票。 不要将投票分配到 DR 区域。
  • 仔细监视资源限制,以避免因资源约束而导致意外重启或故障转移。
    • 确保你的 OS、驱动程序和 SQL Server 都是最新版本。
    • 针对 Azure VM 上 SQL Server 的优化性能。 查看本文中的其他部分以了解详细信息。
    • 减少或分散工作负载以避免资源限制。
    • 移动到具有更高限制的 VM 或磁盘,以避免约束。

对于 SQL Server 可用性组或故障转移群集实例,请考虑以下最佳做法:

  • 如果经常遇到意外故障,请遵循本文其余部分中概述的性能最佳做法。
  • 如果优化 SQL Server VM 性能不能解决意外的故障转移,请考虑减缓对可用性组或故障转移群集实例的监视。 但是,这样做可能无法解决问题的根源,并且可能会通过降低失败的可能性来掩盖症状。 可能仍需要调查并解决根本原因。 对于 Windows Server 2012 或更高版本,请使用以下建议值:
    • 租用超时:使用此公式计算最大租用超时值:
      Lease timeout < (2 * SameSubnetThreshold * SameSubnetDelay).
      从 40 秒开始。 如果使用的是之前建议的宽松 SameSubnetThresholdSameSubnetDelay 值,则租用超时值不要超过 80 秒。
    • 指定时间段内的最大失败数:将此值设置为 6。
  • 使用虚拟网络名称 (VNN) 连接到 HADR 解决方案时,在连接字符串中指定 MultiSubnetFailover = true,即使群集仅跨越一个子网也是如此。
    • 如果客户端不支持 MultiSubnetFailover = True,可能需要设置 RegisterAllProvidersIP = 0HostRecordTTL = 300,以将客户端凭据缓存较短的持续时间。 但是,这样做可能会导致对 DNS 服务器进行其他查询。
  • 要使用分布式网络名称 (DNN) 连接到 HADR 解决方案,请作以下考虑:
    • 必须使用支持 MultiSubnetFailover = True 的客户端驱动程序,并且此参数必须在连接字符串中。
    • 连接到可用性组的 DNN 侦听器时,请使用连接字符串中的唯一 DNN 端口。
  • 使用基本可用性组的数据库镜像连接字符串来绕过对负载均衡器或 DNN 的需求。
  • 在部署高可用性解决方案之前,请验证 VHD 的扇区大小,以避免 I/O 未对齐的情况。 有关详细信息,请参阅 KB3009974

若要了解详细信息,请参阅内容全面的 HADR 最佳做法

后续步骤

若要了解详细信息,请参阅本系列中的其他文章:

有关安全最佳做法,请参阅 Azure 虚拟机上 SQL Server 的安全注意事项

查看 Azure 虚拟机上的 SQL Server 概述中的其他 SQL Server 虚拟机文章。 如果对 SQL Server 虚拟机有任何疑问,请参阅常见问题解答