优化数据库存储

已完成

若要优化数据库存储,应该考虑按比例填充和 tempdb 配置。

了解 I/O 性能

I/o 性能对数据库应用程序至关重要。 Azure SQL 让你不用实际放置文件,不过有很多方法来确保你获得所需的 I/O 性能。

每秒输入/输出 (IOPS) 可能对应用程序来说十分重要。 请确保已选择正确的服务层级和 vCore 来满足 IOPS 需求。 了解如何在本地测量查询的 IOPS(如果要迁移到 Azure)。 如果对 IOPS 有限制,则可能会遇到长时间的 I/O 等待。 在 vCore 购买模型中,如果没有足够的 IOPS,可以纵向扩展 vCore 或是迁移到业务关键或超大规模。 对于生产工作负载,在使用 DTU 时,我们建议迁移到高级层。

I/O 延迟是 I/O 性能的另一个关键组成部分。 若要缩短 Azure SQL 数据库的 I/O 延迟,请考虑业务关键或超大规模。 若要缩短 SQL 托管实例的 I/O 延迟,请迁移到业务关键层,或者增加数据库的文件大小或数量。 改善事务日志延迟可能需要使用多语句事务。

文件和文件组

SQL Server 专业人员通常使用文件和文件组,通过物理文件放置提高 I/O 性能。 Azure SQL 不允许用户将文件放在特定的磁盘系统上。 但是,Azure SQL 对有关速率、IOPS 和延迟的 I/O 性能具有资源承诺。 这样,让用户不必考虑实际的文件放置可能有好处。

Azure SQL 数据库只有一个数据库文件(超大规模通常有多个文件),而且最大大小通过 Azure 接口进行配置。 没有创建更多文件的功能。

Azure SQL 托管实例支持添加数据库文件和配置大小,但不支持文件的物理放置。 可以使用 SQL 托管实例的文件数和文件大小来提高 I/O 性能。 此外,SQL 托管实例支持用户定义的文件组来实现可管理性。

描述比例填充

在包含两个数据文件的 SQL Server 数据库中插入 1 千兆字节的数据时,你可能希望每个文件增加大约 512 兆字节。 但是,情况并不总是如此。 SQL Server 根据每个文件的大小分发数据。 例如,如果两个数据文件均为 2 GB,则数据将均匀分布。 但是,如果一个文件是 10 GB,另一个文件是 1 GB,则大约 900 MB 会进入较大的文件,将 100 MB 放入较小的文件。 此行为在任何数据库中很常见,但在写入密集型 tempdb 中,不均衡的写入模式可以在最大文件中造成瓶颈,因为它处理更多的写入。

在 SQL Server 中配置 Tempdb

SQL Server 在安装期间检测可用 CPU 数,并配置适当的文件数(最多 8 个),甚至调整大小。 此外,跟踪标志 1117 和 1118 的行为已集成到数据库引擎中,但仅限于数据库 tempdb引擎。 对于 tempdb 密集型工作负荷,增加超过 8 个的 tempdb 文件数(与计算机上的 CPU 数匹配)可能会很有帮助。

对于 SQL Server 和 Azure SQL,你可按相同的方式使用 tempdb。 但请注意,配置 tempdb 的功能有所不同,包括文件的放置、文件的数量和大小以及 tempdb 配置选项。

SQL Server 将 tempdb 用于各种任务,而不仅仅是存储用户定义的临时表。 它用于用于存储中间查询结果、排序作和用于行版本控制的版本存储等工作表。 由于这种广泛的利用率,必须将 tempdb 置于可用的最低延迟存储上,并正确配置其数据文件。

tempdb 的数据库文件始终自动存储在本地 SSD 驱动器上,因此 I/O 性能不该成为问题。

SQL Server 专业人员通常使用多个数据库文件划分 tempdb 表的分配。 对于 Azure SQL 数据库,文件数随 vCore 数(例如,两个 vCore 等于四个文件)进行缩放,最大为 16 个。 无法通过 T-SQL 对 tempdb 配置文件数,但是可通过更改部署选项对其进行配置。 tempdb 的最大大小按 vCore 数进行缩放。 SQL 托管实例提供 12 个文件,这与 vCore 无关。

数据库选项 MIXED_PAGE_ALLOCATION 设置为 OFFAUTOGROW_ALL_FILES 设置为 ON。 无法对此进行配置,但与 SQL Server 一样,它们是建议的默认值。

SQL Server 2019 中引入的 tempdb 元数据优化功能(可以缓解严重的闩锁争用)目前在 Azure SQL 数据库或 Azure SQL 托管实例中不可用。

数据库配置

通常,使用 T-SQL ALTER DATABASEALTER DATABASE SCOPED CONFIGURATION 语句配置数据库。 有许多针对性能的配置选项可用于 Azure SQL。 有关 SQL Server、Azure SQL 数据库与 Azure SQL 托管实例之间的差异,请参阅 ALTER DATABASEALTER DATABASE SCOPED CONFIGURATION 参考。

在 Azure SQL 数据库中,默认恢复模式是完全恢复,可确保数据库能够满足 Azure 服务级别协议(SLA)。 这意味着不支持批量作的最小日志记录,但允许最小日志记录的情况除外 tempdb

MAXDOP 配置

最大并行度 (MAXDOP) 可能会影响单个查询的性能。 SQL Server 和 Azure SQL 句柄 MAXDOP 的方式相同。 如果 MAXDOP 设置为更高的值,则每个查询会使用更多的并行线程,从而加快查询执行速度。 但是,这种增加的并行度需要额外的内存资源,这可能会导致内存压力并影响存储性能。 例如,将行组压缩到列存储中时,并行度需要更多内存,这可能会导致内存压力和行组修整。

相反,将 MAXDOP 设置为较低的值可以减少内存压力,从而使存储系统能够更高效地执行。 这在内存资源有限或存储需求较高的环境中非常重要。 通过仔细配置 MAXDOP,可以平衡查询性能和存储效率,确保 CPU 和存储资源的最佳使用。

可使用以下方法在 Azure SQL 中配置 MAXDOP(与 SQL Server 类似):

  • ALTER DATABASE SCOPED CONFIGURATION Azure SQL 支持配置 MAXDOP
  • SQL 托管实例支持“最大并行度”的存储过程 sp_configure
  • MAXDOP 完全支持查询提示。
  • SQL 托管实例支持使用资源调控器进行配置 MAXDOP