介绍如何优化 SQL Server 虚拟机的 Azure 存储
存储性能是 I/O 密集型应用程序(如数据库引擎)的关键要素。 Azure 提供了丰富的存储选项,甚至可以构建存储解决方案来满足工作负载需求。
Azure 存储是一个可靠且安全的平台,旨在满足各种应用程序的各种需求。 它提供了广泛的可缩放解决方案,确保所有类型的存储都支持静态加密。 用户可以在Microsoft管理的加密密钥或用户定义的加密密钥之间进行选择,以增强安全性。
Blob 存储 - Blob 存储就是所谓的基于对象的存储,包括冷、热和存档存储层。 在 SQL Server 环境中,blob 存储通常用于数据库备份,并使用 SQL Server 的“备份到 URL”功能来实现。
文件存储 - 文件存储实际上是一种文件共享,可以安装在虚拟机中,而无需设置任何硬件。 SQL Server 可以将文件存储用作故障转移群集实例的存储目标。
磁盘存储 - Azure 托管磁盘提供面向虚拟机的块存储。 这些磁盘就像本地服务器中的物理磁盘一样进行管理,只是它们已虚拟化。 托管磁盘中有多个性能层,具体取决于工作负载。 这种存储类型是 SQL Server 数据和事务日志文件最常用的类型。
Azure 托管磁盘
Azure 托管磁盘是提供给 Azure 虚拟机的块级存储卷。 块级存储指创建的原始存储卷,可以将其视为单个硬盘驱动器。 这些块设备可以在作系统中管理,存储层不知道磁盘的内容。 块存储的替代方法是对象存储,其中文件及其元数据存储在基础存储系统上。 Azure Blob 存储是对象存储模型的一个例子。 虽然对象存储适用于许多新式开发解决方案,但大多数在虚拟机中运行的工作负荷都使用块存储。
托管磁盘的配置对于 SQL Server 工作负载的性能非常重要。 如果要从本地环境移动,请务必根据前面详述从性能监视器捕获 #B0 平均磁盘秒/读取 #C1 和 #B2 平均磁盘秒/写入 #C3 等指标。 要捕获的另一个指标是每秒 I/O 操作数,可以使用“SQL Server:资源池统计磁盘读取和写入 IO/秒”计数器捕获,该计数器显示 SQL Server 在其峰值时服务的 IOP 数。 了解工作负荷非常重要。 你希望设计存储和虚拟机以满足这些工作负荷高峰的需求,而不会产生重大延迟。 每个 Azure 虚拟机类型对 IOP 有限制。
Azure 托管磁盘分为四种类型:
超级磁盘 - 超级磁盘支持任务关键数据库的高 IO 工作负载且延迟低。
高级 SSD - 高级 SSD 磁盘的吞吐量高、延迟低,可以满足云中运行的大多数数据库工作负载的需要。
标准 SSD - 标准 SSD 是为较少使用的开发/测试工作负载或 Web 服务器设计的,这些工作负载或 Web 服务器执行少量 IO,且要求延迟可预测。
标准 HDD - 标准 HDD 适用于不常访问的备份和文件存储。
通常,生产 SQL Server 工作负荷使用超级磁盘或高级 SSD,或两者的某些组合。 超级磁盘通常用于查找响应时间中的子百万级延迟。 高级 SSD 的响应时间通常达到个位数毫秒,但成本更低,设计上也更灵活。 高级 SSD 还支持读取-缓存,这可以减少访问磁盘的次数,有利于读取量大的数据库工作负载。 读取缓存存储在本地 SSD(Windows 上的 D:\ 驱动器或 Linux 上的 /dev/sdb1/)上,这有助于减少访问实际磁盘时的往返次数。
条带化磁盘以获得最大吞吐量
让 Azure 磁盘实现更高性能和更大容量的方法之一是在多个磁盘上对数据进行条带化。 此方法不适用于超级磁盘,因为可以在单个磁盘上独立缩放 IOP、吞吐量和最大大小。 但如果使用高级 SSD,同时扩展 IOP 和存储容量会很有优势。 若要在 Windows 中条带化磁盘,请将想要的磁盘数添加到 VM,然后使用 Windows 中的存储空间创建池。 不要为池配置任何冗余(这会限制性能),因为冗余是由 Azure 框架提供的,它在同步复制中会保留所有磁盘的三个副本,以防止磁盘故障。 创建池时,池具有的 IOP 和卷量为池中所有磁盘的总和。 例如,如果使用了 10 个 P30 磁盘(每个 1 TB 且每个磁盘有 5000 个 IOPS),则会有一个 10 TB 的卷,其中 50,000 个 IOPS 可用。
SQL Server 存储配置最佳做法
对于 Azure VM 上的 SQL Server 及其存储配置的最佳做法,这里有一些建议:
- 为数据和事务日志文件创建单独的卷
- 在数据文件卷上启用读取缓存
- 不要在日志文件卷上启用任何缓存
- 为 VM 生成存储以处理工作负荷高峰时,规划额外的 20% IOP 和吞吐量
- 使用 D: 驱动器(本地附加 SSD)作为 TempDB 文件,因为 TempDB 在服务器重启时重新创建,因此不会丢失数据丢失的风险
- 启用即时文件初始化以减少文件增长活动的影响。
- 将跟踪文件和错误日志目录移动到数据磁盘
- 对于需要 1 毫秒以下存储延迟的工作负荷,请考虑通过高级 SSD 使用超级磁盘。
Azure 虚拟机资源提供程序
减少在 Azure 虚拟机上为 SQL Server 生成存储的复杂性的一种方法是在 Azure 市场中使用 SQL Server 模板,以便将存储配置为部署的一部分。 可以根据需要配置 IOP,模板可以执行在 Windows 中创建存储空间池的工作。
此资源提供程序还支持将 TempDB 添加到本地 SSD 驱动器,并创建计划任务以在启动时创建文件夹。