为 Azure VM 上的 SQL Server 配置存储

适用于:Azure 虚拟机上的 SQL Server

本文介绍如何使用高级 SSD 为通过Azure Marketplace部署的SQL Server on Azure Virtual Machines(VM)配置存储。

通过 Azure Marketplace 映像部署的 SQL Server VM 会自动遵循默认的 存储最佳实践,这些设置可以在部署过程中进行修改。 某些配置设置可以在部署后更改。

警告

不支持将 tempdb 放置在具有未初始化临时磁盘的 Azure 虚拟机映像的本地临时磁盘上,例如 FXmdsv2。 此问题仅影响具有本地临时存储的新 NVMe 接口Azure Virtual Machines。 通过 Azure 门户进行这些部署可能会失败,SQL Server可能无法启动。 要么使用其他 VM 系列,要么在通过 Azure 门户部署 SQL Server 映像和手动安装 SQL Server 时,将 tempdb 放置在非临时存储上。 若要详细了解此问题,另请参阅受影响的 VM 列表,请查看 VM 部署和SQL Server故障

先决条件

若要使用自动存储配置设置,虚拟机需有以下特征:

新的 VM

以下部分介绍如何为新的SQL Server虚拟机配置存储。

Azure门户

使用 SQL Server 库映像预配 Azure VM 时,在 SQL Server 设置 选项卡上选择 Storage 下的 更改配置,以打开 配置存储 页。 你可以将值保留为默认值,或根据工作负载修改最适合你的需求的磁盘配置类型。

截图突出显示 SQL Server 设置选项卡和更改配置选项。

为数据文件和日志文件选择驱动器位置,从而指定磁盘类型和磁盘数。 使用 IOPS 值来确定最佳存储配置以满足你的业务需求。 选择高级存储会将数据驱动器的 caching 设置为 ReadOnly, 日志驱动器的 None 根据 SQL Server VM 性能最佳做法

在预配期间,从 Azure 门户截取的 SQL Server VM 存储配置页面的截图

磁盘配置是完全可自定义的,因此可以配置SQL Server VM 工作负荷所需的存储拓扑、磁盘类型和 IOPS。 如果 SQL Server VM 位于某个受支持的区域,并且为你的订阅启用了Ultra 磁盘,则可以将 Ultradisk 用作Disk 类型选项。

tempdbTempDb 存储下配置数据库设置,例如数据库文件的位置、文件数、初始大小和自动增长大小(以 MB 为单位)。

  • 目前,在部署期间,tempdb 文件的最大数目为 8,但在部署 SQL Server VM 后可以添加更多文件。
  • 如果在 D: 本地 SSD 卷上配置 SQL Server 实例 tempdb,SQL IaaS 代理扩展会管理重新预配时所需的文件夹和权限。 此配置不需要使用Azure Marketplace映像创建 SQL 虚拟机。

显示可在何处为 SQL VM 配置 tempdb 存储的屏幕截图。

此外,还可以设置磁盘的缓存。 Azure 虚拟机在与 Premium 磁盘 一起使用时,具有称为 Blob Cache 的多层缓存技术。 Blob Cache 使用虚拟机 RAM 和本地 SSD 的组合进行缓存。

高级 SSD 的磁盘缓存可以是 ReadOnlyReadWriteNone

  • ReadOnly缓存对于存储在Premium Storage上的SQL Server数据文件非常有用。 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 Marketplace 的 SQL Server 映像中部署的 SQL Server 虚拟机上才能进行配置。

修改现有驱动器

对于通过 Azure Marketplace 部署的现有SQL Server VM,可以通过 SQL 虚拟机资源或在 Disks 窗格上修改Azure门户中的某些存储设置

若要修改存储设置,请打开 SQL 虚拟机资源,然后选择“设置”下的“存储配置”,在这里可以:

  • 添加更多磁盘
  • 配置或扩展现有的磁盘

突出显示“配置”选项和“存储使用情况”部分的屏幕截图。

选择 “配置 ”将打开 “扩展数据驱动器 ”页,允许更改磁盘类型并添加其他磁盘。 还可以通过“磁盘”窗格添加磁盘。

Azure 门户中的屏幕截图,显示了“扩展数据驱动器”页面,用于配置现有 SQL Server VM 的存储。

如果已达到特定 VM 大小支持的最大磁盘数,则可能需要 调整 VM 的大小

修改 tempdb

还可以使用tempdb”页修改设置,例如文件数tempdb、初始大小和自动增长比率。 选择 配置 旁边的 tempdb 以打开 tempdb 配置 页。

选择 旁边的 配置 tempdb 数据文件 来修改设置,然后选择 旁边的 管理重启时的 tempdb 数据库文件夹,以允许 Azure 在下一次启动 SQL Server 服务时管理您的配置、文件夹和权限。 此配置不需要使用Azure Marketplace映像创建 SQL 虚拟机。

Azure 门户 SQL 虚拟机资源页中的 tempdb 配置页截图。

若要应用更改,请重启SQL Server服务。

增加临时磁盘大小

要增加临时磁盘大小,将虚拟机的大小调整为支持对临时存储使用更大磁盘大小的 SKU。

自动更改

本节提供了 Azure SQL Server VM 预配或在 Azure 门户中配置期间 Azure 自动执行的存储配置更改的参考。

  • Azure从 VM 中选择的存储中配置存储池。 本文章的下一部分提供了有关存储池配置的详细信息。
  • 自动存储配置始终使用高级 SSD P30 数据磁盘。 因此,所选 TB 数目与附加到 VM 的数据磁盘数目之间存在 1:1 映射。

有关定价信息,请参阅 Disk Storage 选项卡上的 Storage 定价页。

创建存储池

Azure使用以下设置在 SQL Server VM 上创建存储池。

设置 价值
条带大小 64 KB
磁盘大小 每个磁盘 1 TB
缓存 读取
分配大小 64 KB NTFS 分配单元大小
恢复 简单恢复(不可复原)
列数 数据磁盘数最多 8 个1

1 创建存储池后,无法更改存储池中的列数。

注意

使用 Optimize-StoragePoolOptimize-Volume 重新平衡池中的空间分配,并优化具有随机排队 I/O 模式的工作负荷类型的性能。

启用缓存

对于高级 SSD,可以在磁盘级别更改缓存策略。 可以使用 Azure 门户、PowerShellAzure CLI 执行此作。

若要在 Azure 门户中更改缓存策略,请执行以下步骤:

  1. 停止SQL Server服务。

  2. 登录到 Azure 门户

  3. 导航到虚拟机,然后选择“设置”下的“磁盘”。

    截图显示在 Azure portal 中 VM 磁盘配置窗格。

  4. 从下拉列表中为磁盘选择适当的缓存策略:“Read-only”或“None”。

    截图显示了 Azure 门户中的磁盘缓存策略配置。

  5. 更改生效后,重启SQL Server VM 并启动SQL Server服务。

启用写入加速器

Write Accelerator是一项磁盘功能,仅适用于 M 系列Virtual Machines(VM)。 写入加速的目的是在需要个位数 I/O 延迟时,通过Azure Premium Storage降低写入的 I/O 延迟,这通常适用于具有大量关键任务型 OLTP 工作负载或数据仓库环境的情况。

在启用写入加速器之前,请查看一些限制,以确认它们对于业务来说,是可接受的。

在更改写入加速策略之前,停止所有SQL Server活动并关闭SQL Server服务。

如果磁盘已条带化,请单独为每个磁盘启用写入加速,并且应在进行任何更改之前关闭Azure VM。

若要使用 Azure 门户启用写入加速,请执行以下步骤:

  1. 停止SQL Server服务。 如果磁盘已条带化,请关闭虚拟机。

  2. 登录到 Azure 门户

  3. 导航到虚拟机,然后选择“设置”下的“磁盘”。

    显示 Azure 门户中 VM 磁盘配置窗格的屏幕截图。

  4. 从下拉列表中,为磁盘选择包含“写入加速器”的缓存选项。

    显示写入加速器缓存策略的屏幕截图。

  5. 更改生效后,启动虚拟机并SQL Server服务。

磁盘条带化

为提高吞吐量,可以添加更多的数据磁盘,并使用磁盘条带化。 若要确定数据磁盘数,请分析SQL Server数据文件所需的吞吐量和带宽,包括日志和 tempdb。 吞吐量和带宽限制因 VM 大小而异。 若要了解详细信息,请参阅 VM 大小

  • 对于 Windows 8/Windows Server 2012 或更高版本,请使用 Storage Spaces并遵循以下准则:

    1. 将条带大小设置为 64 KB(65,536 字节),以避免因分区不对齐而影响性能。 必须使用 PowerShell 来设置交错大小。

    2. 设置列计数 = 物理磁盘的数量。 在配置 8 个以上的磁盘(而不是Server Manager UI)时使用 PowerShell。

例如,以下 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>

已知问题

SQL 虚拟机资源上的“配置磁盘”选项或“存储配置”窗格已灰显。

在 Azure 门户的 SQL 虚拟机资源面板中,Storage 页可能会被灰显,原因如下:

  • SQL IaaS 代理扩展处于失败状态。 Delete,然后通过扩展再次注册SQL Server VM
  • 你自定义了存储池。
  • 您正在使用的图像并非来自Azure Marketplace。
  • 使用非托管磁盘创建了虚拟机。 仅支持托管磁盘。

“扩展磁盘”选项灰显

“扩展磁盘”选项可能因为以下原因显示为灰色:

  • 你自定义了存储池。 如果需要扩展磁盘,请将磁盘添加到存储池以扩大虚拟磁盘。
  • 已更改虚拟磁盘或卷名称的默认值:
    • 存储池命名: SQLVMStoragePool1、SQLVMStoragePool2、SQLVMStoragePool3
    • 虚拟磁盘: SQLVMVirtualDisk1、SQLVMVirtualDisk2、SQLVMVirtualDisk3
    • 卷: SQLVMDATA1、SQLVMLOG 和 SQLVMTEMPDB
  • 已将Windows群集安装到 SQL Server VM,因此不支持扩展磁盘。

我有一个磁盘,其中包含 1 TB 的未分配空间,无法从存储池中删除

没有选项可用来从属于存储池的磁盘中删除未分配空间。

我的事务日志已满

如果日志已满,请查看排查事务日志已满的问题

无法使用 SQL 虚拟机资源配置存储

在以下情况下,Azure 门户中 SQL 虚拟机资源的存储配置窗格可能不可用、灰显,或选择 扩展磁盘 不执行任何操作:

  • 具有自安装SQL Server实例的虚拟机。 目前,仅支持来自Azure Marketplace SQL Server VM 映像。
  • 仅支持具有高级 SSD 的 SQL Server VM。
  • 在SQL Server Configuration Manager中禁用 TCP/IP。