本文介绍优化 SQL Server 并提高 Azure Stack Hub 虚拟机(VM)性能的最佳做法。 在 Azure Stack Hub VM 中运行 SQL Server 时,可以使用适用于本地服务器环境中的 SQL Server 的相同数据库性能优化选项。 Azure Stack Hub 云中关系数据库的性能取决于许多因素,包括 VM 的系列大小和数据磁盘的配置。
创建 SQL Server 映像时,考虑在 Azure Stack Hub 门户中预配 VM。 从 Azure Stack Hub 管理员门户中的“市场管理”下载 SQL IaaS 扩展,然后下载所选的 SQL Server VM 映像。 这些映像包括 SQL Server 2016 SP1、SQL Server 2016 SP2 和 SQL Server 2017。
注意
虽然本文介绍的是如何使用全球 Azure 门户预配 SQL Server VM,但相关指南也适用于 Azure Stack Hub,只是存在以下差异:SSD 不适用于操作系统磁盘;存储配置存在微小差异。
在 VM 映像中,对于 SQL Server,只能使用自带许可 (BYOL)。 对于 Windows Server,默认许可模式为预付。 有关 VM 中 Windows Server 许可证模型的详细信息,请参阅 Azure Stack Hub 市场中的 Windows Server 常见问题解答。
获取 Azure Stack Hub VM 上的 SQL Server 的最佳性能是本文的重点。 如果工作负荷要求较低,可能不需要每项建议的优化。 评估这些建议时应考虑性能需求和工作负荷模式。
注意
有关 Azure VM 中 SQL Server 的性能指南,请参阅这些指南。
SQL Server 最佳做法清单
以下清单适合优化 Azure Stack Hub VM 中 SQL Server 的性能:
| 区域 | 优化 |
|---|---|
| VM 大小 |
DS3 或更高级别适合 SQL Server Enterprise 版本。 DS2 或更高级别适合 SQL Server Standard 版本和 Web 版本。 |
| 存储 | 使用支持高级存储的 VM 系列。 |
| 磁盘 | 至少使用两个数据磁盘(一个用于日志文件,一个用于数据文件和 TempDB),并根据容量需求选择磁盘大小。 在 SQL Server 安装过程中,将默认数据文件位置设置为这些磁盘。 避免使用操作系统或临时磁盘进行数据库存储或日志记录。 使用存储空间条带化多个 Azure 数据磁盘,提高 IO 吞吐量。 使用规定的分配大小格式化。 |
| I/O | 对数据文件启用即时文件初始化。 限制数据库上的自动增长,其固定增量相当小(64-256 MB)。 对数据库禁用自动收缩。 在数据磁盘而非操作系统磁盘上设置默认的备份和数据库文件位置。 启用锁定页面。 应用 SQL Server 服务包和累积更新 |
| 特定于功能 | 直接备份到 Blob 存储(如果受正在使用的 SQL Server 版本支持)。 |
有关如何以及为何进行这些优化的详细信息,请查看以下部分中提供的详细信息和指南。
VM 大小指导原则
对于性能敏感型应用程序,建议使用以下 VM 大小:
- SQL Server 企业版:DS3 或更高版本。
- SQL Server Standard 版本和 Web 版本:DS2 或更高版本。
使用 Azure Stack Hub 时,DS 和 DS_v2 VM 系列没有性能差异。
存储指导原则
在 Azure Stack Hub 中,DS 系列(以及 DSv2 系列)VM 提供最大的操作系统磁盘和数据磁盘吞吐量 (IOPS)。 DS 或 DSv2 系列的 VM 为操作系统磁盘提供高达 1,000 的 IOPS,为数据磁盘提供高达 2,300 的 IOPS,不管所选磁盘的类型或大小如何。
数据磁盘吞吐量只取决于 VM 系列。 请参阅 Azure Stack Hub 支持的 VM 大小,以确定每个 VM 系列的数据磁盘吞吐量。
注意
至于生产型工作负荷,请选择可以在操作系统磁盘和数据磁盘上提供最大可能 IOPS 的 DS 系列或 DSv2 系列的 VM。
在 Azure Stack Hub 中创建存储帐户时,异地复制选项不起作用,因为此功能在 Azure Stack Hub 中不可用。
磁盘指导原则
Azure Stack Hub VM 上有三种主要磁盘类型:
- 操作系统磁盘:在创建 Azure Stack Hub VM 时,平台会将至少一个磁盘(标记为 C 驱动器)附加到 VM 作为操作系统磁盘。 此磁盘是一个 VHD,在存储空间中存储为一个页 blob。
- 临时磁盘:Azure Stack Hub VM 包含另一个名为临时磁盘的磁盘(标记为 D 驱动器)。 这是节点上的一个磁盘,可用于暂存空间。
- 数据磁盘:可以将 VM 附加的磁盘作为数据磁盘,这些磁盘以页 blob 的形式存储。
以下部分说明了有关使用这些不同磁盘的建议。
操作系统磁盘
操作系统磁盘是可以作为操作系统的运行版本来启动和装载的 VHD,并且标记为 C 驱动器。
临时磁盘
不保留标记为 D 驱动器的临时存储驱动器。 不要在 D 驱动器上存储你不想要丢失的数据。 这包括用户数据库文件和用户事务日志文件。
建议将 TempDB 存储在数据磁盘上,因为每个数据磁盘提供高达 2,300 的 IOPS。
数据磁盘数
- 对数据和日志文件使用数据磁盘。 如果不使用磁盘条带化,请使用支持高级存储的 VM 中的两个数据磁盘,一个磁盘包含日志文件,另一个包含数据和 TempDB 文件。 每个数据磁盘均提供可观的 IOPS,具体取决于 VM 系列,如 Azure Stack Hub 中支持的 VM 大小中所述。 如果使用磁盘条带化技术(如存储空间),请将所有数据和日志文件放置在同一驱动器上(包括 TempDB)。 此配置可以为你提供最大数目的 IOPS 供 SQL Server 使用,不管哪个文件在特定时刻需要它们。
注意
在门户中预配 SQL Server VM 时,你可以编辑存储配置。 Azure Stack Hub 根据配置来配置一个或多个磁盘。 多个磁盘会组合成一个存储池。 数据文件和日志文件一起位于此配置中。
磁盘条带化:若要提高吞吐量,可以添加其他数据磁盘并使用磁盘条带化。 若要确定所需的数据磁盘数,请分析日志文件以及数据和 TempDB 文件所需的 IOPS 数。 请注意,IOPS 限制是按数据磁盘来设置的,取决于 VM 系列而不是 VM 大小。 但是,网络带宽限制取决于 VM 大小。 请参阅 Azure Stack Hub 中的 VM 大小中的表,了解更多详细信息。 遵循以下指南:
对于 Windows Server 2012 或更高版本,请按照以下指南使用存储空间:
对于联机事务处理 (OLTP) 工作负荷,请将交错(条带大小)设置为 64 KB(65,536 字节),对于数据仓库工作负荷,请将交错(条带大小)设置为 256 KB(262,144 字节),以避免分区定位错误导致的性能影响。 这必须使用 PowerShell 设置。
将列计数设置为物理磁盘数。 配置的磁盘超过八个时,请使用 PowerShell(而不是服务器管理器 UI)。 例如,以下 PowerShell 命令创建一个新的存储池,其中交错大小设置为 64 KB,列数设置为 2:
$PoolCount = Get-PhysicalDisk -CanPool $True $PhysicalDisks = Get-PhysicalDisk | Where-Object {$_.FriendlyName -like "*2" -or $_.FriendlyName -like "*3"} New-StoragePool -FriendlyName "DataFiles" -StorageSubsystemFriendlyName "Storage Spaces*" -PhysicalDisks $PhysicalDisks | New-VirtualDisk -FriendlyName "DataFiles" -Interleave 65536 -NumberOfColumns 2 -ResiliencySettingName simple -UseMaximumSize |Initialize-Disk -PartitionStyle GPT -PassThru |New-Partition -AssignDriveLetter -UseMaximumSize |Format-Volume -FileSystem NTFS -NewFileSystemLabel "DataDisks" -AllocationUnitSize 65536 -Confirm:$false
根据负载预期确定与你的存储池相关联的磁盘数。 请记住,不同的 VM 大小允许不同数量的附加数据磁盘。 有关详细信息,请参阅 Azure Stack Hub 中支持的 VM 大小。
若要获取数据磁盘的最大可能 IOPS,建议添加 VM 大小支持的最大数据磁盘数,并使用磁盘条带化。
NTFS 分配单元大小:格式化数据磁盘时,建议对数据和日志文件以及 TempDB 使用 64 KB 的分配单元大小。
磁盘管理做法:删除数据磁盘时,在更改期间停止 SQL Server 服务。 另外,请勿更改磁盘上的缓存设置,因为这样做不会改进性能。
警告
在这些作期间未能停止 SQL 服务可能会导致数据库损坏。
I/O 指导原则
请考虑启用即时文件初始化以减少初始文件分配所需的时间。 若要利用即时文件初始化,请将 SE_MANAGE_VOLUME_NAME 授予 SQL Server (MSSQLSERVER) 服务帐户并将其添加到“执行卷维护任务”安全策略。 如果使用的是用于 Azure 的 SQL Server 平台映像,默认服务帐户 (NT Service\MSSQLSERVER) 不会添加到“执行卷维护任务”安全策略。 换而言之,SQL Server Azure 平台映像中不会启用即时文件初始化。 将 SQL Server 服务帐户添加到“执行卷维护任务”安全策略后,请重启 SQL Server 服务。 使用此功能时,可能存在安全注意事项。 有关详细信息,请参阅 数据库文件初始化。
自动增长 是意外增长的应急措施。 不要通过自动增长管理数据和记录日常增长。 如果使用自动增长,请使用大小开关预增长文件。
请确保禁用自动收缩,以避免可能对性能产生负面影响的不必要开销。
设置默认备份和数据库文件位置。 使用本文中的建议,并在“服务器属性”窗口中进行更改。 有关说明,请参阅 查看或更改数据和日志文件的默认位置。 以下屏幕截图显示了在哪些位置进行这些更改:
建立锁定的页以减少 IO 和任何分页活动。 有关详细信息,请参阅 启用内存中的锁页选项。
考虑在传入/传出 Azure Stack Hub 时压缩任何数据文件,包括备份。
功能特定指南
某些部署可以使用更高级的配置技术实现性能优势。 以下列表突出显示了一些有助于实现更好性能的 SQL Server 功能:
备份到 Azure存储。 为在 Azure Stack Hub VM 中运行的 SQL Server 进行备份时,可以使用 SQL Server 备份到 URL。 此功能从 SQL Server 2012 SP1 CU2 开始提供,建议在备份到附加数据磁盘时使用。
使用 Azure 存储备份或还原时,请遵循从 SQL Server 备份到 URL 的最佳做法和故障排除和从 Microsoft Azure 中存储的备份还原中提供的建议。 还可以在 Azure VM 中使用 SQL Server 的 自动备份功能来自动化这些备份。
备份到 Azure Stack Hub 存储。 可以备份到 Azure Stack Hub 存储,所用方式类似于备份到 Azure 存储。 在 SQL Server Management Studio(SSMS)中创建备份时,必须手动输入配置信息。 不能使用 SSMS 创建存储容器或共享访问签名。 SSMS 仅连接到 Azure 订阅,不连接到 Azure Stack Hub 订阅。 而是在 Azure Stack Hub 门户中或使用 PowerShell 创建存储帐户、容器和共享访问签名。
注意
共享访问签名是 Azure Stack Hub 门户中的 SAS 令牌,字符串中没有前导的“?”。 如果从门户使用复制功能,请删除前面的“?”符号,以便令牌在 SQL Server 中正常工作。
在 SQL Server 中设置和配置备份目标后,即可备份到 Azure Stack Hub Blob 存储。