你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

为 Azure SQL 托管实例配置 tempdb 设置

适用于:Azure SQL 托管实例

本文介绍如何为 Azure SQL 托管实例配置 tempdb 设置。

Azure SQL 托管实例允许配置以下内容:

  • tempdb 文件的数目
  • tempdb 文件的增长增量
  • tempdb 的大小上限

重启、更新实例后或如果发生故障转移,tempdb 设置将保留。

概述

tempdb 是 Azure SQL 托管实例附带的默认系统数据库之一。 tempdb 的结构与任何其他用户数据库结构相同;不同之处在于,由于 tempdb 用于非持久存储,因此极少记录事务。

tempdb 无法删除、分离、脱机、重命名和还原。 尝试上述任一操作将返回错误。 tempdb 在每次启动服务器实例时重新生成,并且在上一会话期间可能已在 tempdb 中创建的任何对象在服务重启时或者实例更新管理操作或故障转移后,不会保留。

tempdb 中的工作负载与其他用户数据库中的工作负载不同;对象和数据经常被创建和销毁,并发性非常高。 每个托管实例只有一个 tempdb。 即使有多个数据库和应用程序连接到实例,它们也使用相同的 tempdb 数据库。 当服务尝试在大量使用的 tempdb 中分配页面时,可能会遇到争用。 根据争用程度,涉及 tempdb 的查询和请求可能会变得无响应。 这就是 tempdb 对服务性能至关重要的原因。

tempdb 文件的数目

增加 tempdb 数据文件的数量会为每个数据文件创建一个或多个 GAM 和 SGAM 页面,这有助于提高 tempdb 并发性并减少 PFC 页面争用。 但是,增加 tempdb 数据文件的数量可能会对性能产生其他影响,因此请在生产中实现之前进行全面测试。

默认情况下,Azure SQL 托管实例创建 12 个 tempdb 数据文件和 1 个 tempdb 日志文件,但可以修改此配置。

修改 tempdb 文件数具有以下限制:

  • 新文件的逻辑名称不区分大小写,最多包含 16 个字符,且无空格。
  • tempdb 文件的数量上限是 128。

注意

添加新文件后,无需重启服务器;但是,更空的文件将被赋予更高的优先级,并且用于分配页面的轮循机制算法将丢失,直到系统重新均衡。

可以使用 SQL Server Management Studio (SSMS) 和 Transact-SQL (T-SQL) 更改 Azure SQL 托管实例中 tempdb 的文件数。

可以使用 SQL Server Management Studio (SSMS) 来修改 tempdb 文件数。 为此,请执行下列步骤:

  1. 连接到 SSMS 中的托管实例。

  2. 在“对象资源管理器”中展开“数据库”,然后展开“系统数据库”。

  3. 右键单击 tempdb 并选择“属性”。

  4. 选择“选择页面”下的“文件”以查看现有 tempdb 文件数。

  5. 若要添加文件,请选择“添加”,然后在行中提供有关新数据文件的信息。

    Screenshot of Database Properties in SSMS, with new database file name highlighted.

  6. 若要删除 tempdb 文件,请从数据库文件列表中选择要删除的文件,然后选择“删除”。

增长增量

tempdb 文件增长可能会对使用 tempdb 的查询产生性能影响。 因此,tempdb 数据文件增长增量过小可能会导致盘区碎片,而增量太大可能会导致增长缓慢,如果没有足够的空间进行增长,还会导致增长失败。 tempdb 文件增长增量的最佳值取决于工作负载。

对于 tempdb 数据文件,SQL 托管实例的默认增长增量为 254 MB,对于 tempdb 日志文件,默认增长增量为 64 MB,但可以配置增长增量来适应你的工作负载并优化性能。

考虑以下情况:

  • 文件增长参数支持 int_growth_increment 采用以下单位:KB、MB、GB、TB 和 %。
  • 所有 tempdb 数据文件的增长增量都应相同,否则分配页面的轮循机制算法可能会受到影响。

可以使用 SQL Server Management Studio (SSMS) 和 Transact-SQL (T-SQL) 来更改 tempdb 文件的增长增量。

可以使用 SQL Server Management Studio (SSMS) 来修改 tempdb 文件的增长增量。 为此,请执行下列步骤:

  1. 连接到 SSMS 中的托管实例。

  2. 在“对象资源管理器”中展开“数据库”,然后展开“系统数据库”。

  3. 右键单击 tempdb 并选择“属性”。

  4. 选择“选择页面”下的“文件”以查看现有 tempdb 文件数。

  5. 选择数据文件旁边的省略号 (...) 以打开“更改自动增长属性”对话框窗口。

  6. 选中“启用自动增长”旁边的框,然后通过指定文件增长值(以 % 或 MB 为单位)来修改自动增长设置。

    Screenshot of Change Autogrowth for tempdev in SSMS, with new database file name highlighted.

  7. 选择“确定”保存设置

最大大小

tempdb 大小是所有 tempdb 文件的大小总和。 tempdb 文件大小是为该 tempdb 文件分配的(清零的)空间。 所有 tempdb 文件的初始文件大小为 16 MB,即实例重启或故障转移时所有 tempdb 文件的大小。 tempdb 数据文件的已用空间达到文件大小后,所有 tempdb 数据文件都会按其配置的增长增量自动增长。

tempdb已用空间是所有 tempdb 文件已用空间的总和。 tempdb 文件已用空间等于该 tempdb 文件大小中非零信息占用的那部分大小。 tempdb 已用空间和 tempdb可用空间的总和等于 tempdb 的大小。

可以使用 T-SQL 来确定 tempdb 文件的当前已用空间和可用空间。

若要获取 tempdb 数据文件的已用空间、可用空间和大小,请运行以下命令:

USE tempdb
SELECT SUM((allocated_extent_page_count)*1.0/128) AS TempDB_used_data_space_inMB, 
	SUM((unallocated_extent_page_count)*1.0/128) AS TempDB_free_data_space_inMB, 
	SUM(total_page_count*1.0/128) AS TempDB_data_size_inMB 
FROM sys.dm_db_file_space_usage

以下屏幕截图显示了示例输出:

Screenshot of the query result in SSMS showing used and free space in the tempdb data file.

若要获取 tempdb 日志文件的已用空间、可用空间和大小,请运行以下命令:

USE tempdb
SELECT used_log_space_in_bytes*1.0/1024/1024 AS TempDB_used_log_space_inMB,
     (total_log_size_in_bytes- used_log_space_in_bytes)*1.0/1024/1024 AS TempDB_free_log_space_inMB,
     total_log_size_in_bytes*1.0/1024/1024 AS TempDB_log_size_inMB
FROM sys.dm_db_log_space_usage

以下屏幕截图显示了示例输出:

Screenshot of the query result in SSMS showing used and free space in the tempdb log file.

tempdb 的大小上限是一种限制,超出此限制后,tempdb 无法进一步增长。

SQL 托管实例的 tempdb 大小上限具有以下限制:

  • 在“常规用途”服务层级中,tempdb 的大小上限为 24 GB/vCore (96-1920 GB),日志文件的大小上限为 120 GB。
  • 在“业务关键”服务层级中,tempdb 与其他数据库争夺资源,因此在 tempdb 与其他数据库之间共享预留存储。 tempdb 日志文件的大小上限为 2 TB。

tempdb 文件会一直增长,直到达到服务层级允许的最大限制,或者达到手动配置的最大 tempdb 文件大小允许的最大限制。

可以使用 SQL Server Management Studio (SSMS) 和 Transact-SQL (T-SQL) 来更改 tempdb 文件的大小上限。

若要确定 SSMS 中的当前 tempdb 大小上限,请执行以下步骤:

  1. 连接到 SSMS 中的托管实例。
  2. 在“对象资源管理器”中展开“数据库”,然后展开“系统数据库”。
  3. 右键单击 tempdb 并选择“属性”。
  4. 在“常规”页上,检查“数据库”下的“大小”值,以确定最大 tempdb 大小。 值 -1 指示 tempdb 的大小上限不受限制。

Screenshot of tempdb database properties showing the max size for tempdb in SSMS.

若要更改 SSMS 中的当前 tempdb 大小上限,请执行以下步骤:

  1. 连接到 SSMS 中的托管实例。
  2. 在“对象资源管理器”中展开“数据库”,然后展开“系统数据库”。
  3. 右键单击 tempdb 并选择“属性”。
  4. 选择“选择页面”下的“文件”以查看现有 tempdb 文件数。
  5. 选择数据文件旁边的省略号 (...) 以打开“更改自动增长属性”对话框窗口。
  6. 通过更改“最大文件大小”下的值来修改 tempdb 的大小上限设置。
  7. 选择“确定”保存设置

Screenshot of the change autogrowth dialog box in SSMS, with maximum file size highlighted.

tempdb 限制

下表定义了各种 tempdb 配置设置的限制:

配置设置
tempdb 文件的逻辑名称 最多 16 个字符
tempdb 文件的数目 最多 128 个文件
tempdb 文件的默认数目 13(1 个日志文件 + 12 个数据文件)
tempdb 数据文件的初始大小 16 MB
tempdb 数据文件的默认增长增量 256 MB
tempdb 日志文件的初始大小 16 MB
tempdb 日志文件的默认增长增量 64 MB
初始最大 tempdb 大小 -1(无限制)
tempdb 的大小上限 可达存储大小

后续步骤