为 Azure VM 上的 SQL Server 配置存储
本文介绍如何使用高级 SSD 在通过 Azure 市场部署的 Azure 虚拟机 (VM) 上为 SQL Server 配置存储。
通过市场映像部署的 SQL Server VM 自动遵循默认的存储最佳做法,但可以在部署过程中修改默认的存储最佳做法。 某些配置设置可以在部署后更改。
先决条件
若要使用自动存储配置设置,虚拟机需有以下特征:
- 已使用 SQL Server 库映像预配。
- 使用 Resource Manager 部署模型。
- 使用高级 SSD。
新的 VM
以下部分介绍了如何为新的 SQL Server 虚拟机配置存储。
Azure 门户
使用 SQL Server 库映像预配 Azure VM 时,请选择“SQL Server 设置”选项卡中“存储”下的“更改配置”以打开“配置存储”页 。 你可以将值保留为默认值,或根据工作负载修改最适合你的需求的磁盘配置类型。
为数据文件和日志文件选择驱动器位置,从而指定磁盘类型和磁盘数。 使用 IOPS 值来确定最佳存储配置以满足你的业务需求。 根据 SQL Server VM 性能最佳做法,选择“高级存储”会将数据驱动器的缓存设置为“ReadOnly”,并将日志驱动器的缓存设置为“None”。
磁盘配置可完全自定义,因此,可以配置 SQL Server VM 工作负载所需的存储拓扑、磁盘类型和 IOPS。 如果 SQL Server VM 位于受支持的区域,并且已为订阅启用超级磁盘,则还可将超级磁盘作为“磁盘类型”的选项。
在“TempDb 存储”下配置 tempdb
数据库设置,例如数据库文件的位置,以及文件数目、初始大小和自动增长大小(以 MB 为单位)。
- 目前,在部署期间,
tempdb
文件的最大数目为 8,但在部署 SQL Server VM 后可以添加更多文件。 - 如果按照建议在 D: 本地 SSD 卷上配置 SQL Server 实例
tempdb
,则 SQL IaaS 代理扩展可在重新预配时管理所需的文件夹和权限。 这并不需要使用 Azure 市场中的映像创建 SQL 虚拟机。
此外,还可以设置磁盘的缓存。 与高级磁盘一起使用时,Azure VM 具有一种称为 Blob 缓存的多层缓存技术。 Blob Cache 使用虚拟机 RAM 和本地 SSD 的组合进行缓存。
高级 SSD 的磁盘缓存可以是“ReadOnly”、“ReadWrite”或“None”。
对于存储在高级存储上的 SQL Server 数据文件,ReadOnly 缓存非常有用。 ReadOnly 缓存提供较低的读取延迟、较高的读取 IOPS 和吞吐量,因为从缓存(位于 VM 内存和本地 SSD 内)执行读取。 与从 Azure Blob 存储读取数据磁盘相比,这些读取速度要快得多。 高级存储不会将由缓存提供的读取操作计入磁盘 IOPS 和吞吐量。 因此,应用程序能够实现更高的总 IOPS 和吞吐量。
“None”缓存配置应用于托管 SQL Server 日志文件的磁盘,因为日志文件是按顺序写入的,不能从“ReadOnly”缓存中获益。
不应使用“ReadWrite”缓存来托管 SQL Server 文件,因为 SQL Server 不支持与“ReadWrite”缓存的数据一致性。 如果写入操作通过 ReadOnly blob 缓存层,则写入会浪费 ReadOnly blob 缓存的容量并且延迟略微增加。
提示
请确保存储配置与所选 VM 大小施加的限制相匹配。 选择超出 VM 大小的性能上限的存储参数将导致警告:
The desired performance might not be reached due to the maximum virtual machine disk performance cap
。 可以通过更改磁盘类型来减少 IOPs,或增加 VM 大小以提高性能上限。 这不会停止预配。
根据所做的选择,Azure 会在创建 VM 后执行以下存储配置任务:
- 创建高级 SSD 盘并将其附加到虚拟机。
- 配置 SQL Server 可访问的数据磁盘。
- 根据指定的大小和性能(IOPS 和吞吐量)要求,在存储池中配置数据磁盘。
- 将存储池与虚拟机上的新驱动器相关联。
有关如何在 Azure 门户中创建 SQL Server VM 的完整演练,请参阅预配教程。
Resource Manager 模板
如果使用以下 Resource Manager 模板,则会默认附加两个不带存储池配置的高级数据磁盘。 但是,可以自定义这些模板,更改附加到虚拟机的高级数据磁盘的数目。
快速入门模板
可以使用以下快速入门模板通过存储优化来部署 SQL Server VM。
注意
某些 VM 大小可能没有临时或本地存储。 如果在没有临时存储的 Azure VM 上部署 SQL Server,则 tempdb
数据和日志文件将放在数据文件夹中。
现有 VM
注意
只能为从 Azure 市场中的 SQL Server 映像部署的 SQL Server VM 配置存储。
修改现有驱动器
对于已通过 Azure 市场部署的现有 SQL Server VM,可以通过 SQL 虚拟机资源在 Azure 门户中或在“磁盘”窗格上修改某些存储设置。
若要修改存储设置,请打开 SQL 虚拟机资源,然后选择“设置”下的“存储配置”,在这里可以:
- 添加更多磁盘
- 配置或扩展现有的磁盘
选择“配置”打开“扩展数据驱动器”页,可以从中更改磁盘类型并添加额外的磁盘。 还可以通过“磁盘”窗格添加磁盘。
如果已达到特定 VM 大小支持的最大磁盘数,可能需要调整 VM 的大小。
修改 tempdb
也可以使用“存储配置”页修改 tempdb
设置,例如 tempdb
文件的数量、初始大小和自动增长比率。 选择 tempdb 旁边的“配置”,打开“tempdb 配置”页。
选择“配置 tempdb 数据文件”旁边的“是”,以修改设置,然后选择“重启时管理 tempdb 数据库文件夹”旁边的“是”,以允许 Azure 管理 SQL Server 服务下次启动时的 tempdb
配置、文件夹和权限。 这并不需要使用 Azure 市场中的映像创建 SQL 虚拟机。
重启 SQL Server 服务以应用更改。
增加临时磁盘大小
要增加临时磁盘大小,将虚拟机的大小调整为支持对临时存储使用更大磁盘大小的 SKU。
自动更改
本部分提供有关在 Azure 门户中预配或配置 SQL Server VM 期间,Azure 自动执行的存储配置更改的参考信息。
- Azure 通过从 VM 中选择的存储配置存储池。 本文章的下一部分提供了有关存储池配置的详细信息。
- 自动存储配置始终使用高级 SSD P30 数据磁盘。 因此,所选 TB 数目与附加到 VM 的数据磁盘数目之间存在 1:1 映射。
有关价格信息,请参阅“磁盘存储”选项卡上的存储定价页。
创建存储池
Azure 使用以下设置在 SQL Server VM 上创建存储池。
设置 | 值 |
---|---|
条带大小 | 64 KB |
磁盘大小 | 每个磁盘 1 TB |
缓存 | 读取 |
分配大小 | 64 KB NTFS 分配单元大小 |
恢复 | 简单恢复(不可复原) |
列数 | 数据磁盘数最多 8 个1 |
1 创建存储池后,无法更改存储池中的列数。
注意
使用 Optimize-StoragePoo 和 Optimize-Volume 重新平衡池中的空间分配,并针对具有随机深度排队 I/O 模式的工作负载类型优化性能。
启用缓存
对于高级 SSD,可以在磁盘级别更改缓存策略。 可以使用 Azure 门户、PowerShell 或 Azure CLI 执行此操作。
若要在 Azure 门户中更改缓存策略,请按照以下步骤操作:
停止 SQL Server 服务。
登录到 Azure 门户。
导航到虚拟机,在“设置”下面选择“磁盘”。
从下拉列表中为磁盘选择适当的缓存策略:“Read-only”或“None”。
更改生效后,重新启动 SQL Server VM 并启动 SQL Server 服务。
启用写入加速器
写入加速器是一项磁盘功能,仅适用于 M 系列虚拟机 (VM)。 写入加速的目的在于,当你因大量的任务关键型 OLTP 工作负载或数据仓库环境而需要个位数 I/O 延迟时,可以缩短对 Azure 高级存储进行写入的 I/O 延迟。
在启用写入加速器之前,请查看一些限制,以确认它们对于业务来说,是可接受的。
在对写入加速策略进行更改之前,停止所有 SQL Server 活动并关闭 SQL Server 服务。
如果磁盘已条带化,请分别为每个磁盘启用写入加速,并在进行任何更改之前关闭 Azure VM。
若要使用 Azure 门户启用写入加速,请执行以下步骤:
停止 SQL Server 服务。 如果磁盘已条带化,请关闭虚拟机。
登录到 Azure 门户。
导航到虚拟机,在“设置”下面选择“磁盘”。
从下拉列表中,为磁盘选择包含“写入加速器”的缓存选项。
更改生效后,启动虚拟机和 SQL Server 服务。
磁盘条带化
为提高吞吐量,可以添加更多的数据磁盘,并使用磁盘条带化。 若要确定数据磁盘的数量,请分析 SQL Server 数据文件(包括日志和 tempdb
)所需的吞吐量和带宽。 吞吐量和带宽限制因 VM 大小而异。 若要了解详细信息,请参阅 VM 大小
对于 Windows 8/Windows Server 2012 或更高版本,按照以下指南使用存储空间:
将交错(条带大小)设置为 64 KB(65,536字节),以避免因分区不对齐而影响性能。 这必须使用 PowerShell 设置。
设置列计数 = 物理磁盘的数量。 配置的磁盘超过 8 个时,请使用 PowerShell(而不是服务器管理器 UI)。
例如,以下 PowerShell 创建新的存储池,其交错大小为 64 KB,其列数等于存储池中的物理磁盘数量:
$PhysicalDisks = Get-PhysicalDisk | Where-Object {$_.FriendlyName -like "*2" -or $_.FriendlyName -like "*3"}
New-StoragePool -FriendlyName "DataFiles" -StorageSubsystemFriendlyName "Windows Storage on <VM Name>" `
-PhysicalDisks $PhysicalDisks | New-VirtualDisk -FriendlyName "DataFiles" `
-Interleave 65536 -NumberOfColumns $PhysicalDisks.Count -ResiliencySettingName simple `
-UseMaximumSize |Initialize-Disk -PartitionStyle GPT -PassThru |New-Partition -AssignDriveLetter `
-UseMaximumSize |Format-Volume -FileSystem NTFS -NewFileSystemLabel "DataDisks" `
-AllocationUnitSize 65536 -Confirm:$false
在 Windows Server 2016 及更高版本中,-StorageSubsystemFriendlyName
的默认值为 Windows Storage on <VM Name>
对于 Windows 2008 R2 或更早版本,可以使用动态磁盘(操作系统条带化卷),条带大小始终为 64 KB。 从 Windows 8/Windows Server 2012 开始不再提供此选项。 有关信息,请参阅虚拟磁盘服务正在过渡到 Windows 存储管理 API 中的支持声明。
如果将存储空间直通 (S2D) 与 SQL Server 故障转移群集实例结合使用,则必须配置单个池。 虽然可以在该单个池上创建不同的卷,但它们都拥有相同的特征,例如相同的缓存策略。
根据负载预期确定与你的存储池相关联的磁盘数。 请记住,不同的 VM 大小允许不同数量的附加数据磁盘。 有关详细信息,请参阅虚拟机的大小。
已知问题
SQL 虚拟机资源上的“配置磁盘”选项或“存储配置”窗格灰显
由于以下原因,Azure 门户中 SQL 虚拟机资源窗格的“存储”页面可能会灰显:
- SQL IaaS 代理扩展处于失败状态。 删除 SQL Server VM,然后再次向扩展注册 SQL Server VM。
- 已自定义存储池。
- 你使用的是非市场映像。
- 已使用非托管磁盘创建了虚拟机。 仅支持托管磁盘。
扩展磁盘选项灰显
“扩展磁盘”选项可能由于以下原因灰显:
- 已自定义存储池。 如果需要扩展磁盘,请将磁盘添加到存储池以扩大虚拟磁盘。
- 已更改虚拟磁盘或卷名称的默认值:
- 存储池命名: SQLVMStoragePool1、SQLVMStoragePool2、SQLVMStoragePool3
- 虚拟磁盘: SQLVMVirtualDisk1、SQLVMVirtualDisk2、SQLVMVirtualDisk3
- 卷: SQLVMDATA1、SQLVMLOG 和 SQLVMTEMPDB
- 已将 Windows 群集安装到 SQL Server VM,因此不支持扩展磁盘。
我的一个磁盘有 1 TB 的未分配空间,无法将这些空间从存储池中删除
没有选项可用来从属于存储池的磁盘中删除未分配空间。
我的事务日志已满
如果日志已满,请查看解决事务日志已满的问题。
无法为存储配置 SQL 虚拟机资源
在以下应用场景下,Azure 门户中 SQL 虚拟机资源的“存储配置”窗格可能不可用、灰显或选择“扩展磁盘”不执行任何操作:
- 具有自行安装的 SQL Server 实例的虚拟机。 当前,仅支持来自 Azure 市场的 SQL Server VM 映像。
- 仅支持具有高级 SSD 的 SQL Server VM。
- 在 SQL Server 配置管理器中禁用 TCP/IP 时。