访问 Amazon RDS 上 Microsoft SQL Server 数据库实例的临时数据库 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

访问 Amazon RDS 上 Microsoft SQL Server 数据库实例的临时数据库

您现在可以访问 Amazon RDS 上 Microsoft RDS Server 数据库实例的 tempdb 数据库。您可以通过 Microsoft SQL Server Management Studio (SSMS) 或任何其他标准 SQL 客户端应用程序,使用 Transact-SQL 在 tempdb 上运行代码。有关连接到数据库实例的更多信息,请参阅连接到运行 Microsoft SQL Server 数据库引擎的数据库实例

向数据库实例的主用户授予对 CONTROLtempdb 访问权限,以便此用户能够修改 tempdb 数据库选项。主用户不是 tempdb 数据库的数据库拥有者。如果需要,主用户可以授予其他用户 CONTROL 访问权限,使得这些用户也可以修改 tempdb 数据库选项。

注意

您可以在 tempdb 数据库上运行数据库控制台命令 (DBCC)。

修改临时数据库选项

您可以在 Amazon RDS 数据库实例上修改 tempdb 数据库的数据库选项。有关可以修改哪些选项的详细信息,请参阅 Microsoft 文档中的临时数据库

最大文件大小等数据库选项在您重新启动数据库实例之后会保留。您可以修改数据库选项以优化导入数据时的性能,以及防止存储空间不足。

优化导入数据时的性能

在将大量数据导入数据库实例时,如果要优化性能,请将临时数据库的 SIZEFILEGROWTH 属性设置为较大的数字。有关优化 tempdb 的更多信息,请参阅 Microsoft 文档中的优化临时数据库性能

以下示例说明了将大小设置为 100 GB 并将文件增长设置为 10%。

alter database[tempdb] modify file (NAME = N'templog', SIZE=100GB, FILEGROWTH = 10%)

防止存储问题

要防止 tempdb 数据库使用所有可用的磁盘空间,请设置 MAXSIZE 属性。以下示例说明了将该属性设置为 2048 MB。

alter database [tempdb] modify file (NAME = N'templog', MAXSIZE = 2048MB)

缩减临时数据库

可通过两种方法缩减 Amazon RDS 数据库实例上的 tempdb 数据库。可以使用 rds_shrink_tempdbfile 过程,也可以设置 SIZE 属性。

使用 rds_shrink_tempdbfile 过程

您可以使用 Amazon RDS 过程 msdb.dbo.rds_shrink_tempdbfile 缩减 tempdb 数据库。您只能在具有对 rds_shrink_tempdbfile 数据库的 CONTROL 访问权限时调用 tempdb。在调用 rds_shrink_tempdbfile 时,数据库实例不会停机。

rds_shrink_tempdbfile 过程具有以下参数。

参数名称 数据类型 默认值 必需 描述

@temp_filename

SYSNAME

必需

要缩减的文件的逻辑名称。

@target_size

int

null

可选

文件的新大小 (以 MB 为单位)。

以下示例获取 tempdb 数据库的文件的名称。

use tempdb; GO select name, * from sys.sysfiles; GO

以下示例缩减名为 tempdbtest_file 数据库文件,并请求新的 10 MB 大小:

exec msdb.dbo.rds_shrink_tempdbfile @temp_filename = N'test_file', @target_size = 10;

设置 SIZE 属性

您也可以通过设置 tempdb 属性,然后重新启动数据库实例来缩减 SIZE 数据库。有关重新启动数据库实例的更多信息,请参阅重启中的数据库实例

以下示例说明了将 SIZE 属性设置为 1024 MB。

alter database [tempdb] modify file (NAME = N'templog', SIZE = 1024MB)

多可用区部署的 TempDB 配置

如果您的 RDS for SQL Server 数据库实例位于使用数据库镜像(DBM)或 Always On 可用性组(AG)的多可用区部署内,请注意以下有关使用 tempdb 数据库的注意事项。

您无法将 tempdb 数据从主数据库实例复制到辅助数据库实例。当您失效转移到辅助数据库实例时,辅助数据库实例上的 tempdb 将为空。

您可以将 tempdb 数据库选项的配置(包括其文件大小和自动增长设置)从主数据库实例同步到辅助数据库实例。所有 RDS for SQL Server 版本都支持同步 tempDB 配置。您可以使用以下存储过程开启 tempdb 配置的自动同步:

EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'TempDbFile';
重要

在使用 rds_set_system_database_sync_objects 存储过程之前,请确保已在主数据库实例(而不是辅助数据库实例)上设置了首选 tempdb 配置。如果您在辅助数据库实例上更改了配置,则在您开启自动同步时,您的首选 tempdb 配置可能会被删除。

您可以使用以下函数来确认是否开启了 tempdb 配置的自动同步:

SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();

开启 tempdb 配置自动同步后,将显示 object_class 字段的返回值。当它关闭时,不会返回任何值。

您可以使用以下函数来查找上次同步对象的时间,以 UTC 时间表示:

SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();

例如,如果您在 01:00 修改 tempdb 配置,然后运行 rds_fn_server_object_last_sync_time 函数,则为 last_sync_time 返回的值应在 01:00 之后,表示发生了自动同步。

如果您也在使用 SQL Server Agent 任务复制,则可以通过在 @object_type 参数中提供 SQL 代理任务和 tempdb 配置来为它们启用复制:

EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob,TempDbFile';

有关 SQL Server Agent 任务复制的更多信息,请参阅启用 SQL Server Agent 作业复制

除了使用 rds_set_system_database_sync_objects 存储过程来确保自动同步 tempdb 配置更改之外,还可以使用以下手动方法之一:

注意

我们建议使用 rds_set_system_database_sync_objects 存储过程开启 tempdb 配置的自动同步。使用自动同步可以防止每次更改 tempdb 配置时都需要执行这些手动任务。

  • 首先修改数据库实例并关闭多可用区,然后修改临时数据库,最后重新启用多可用区。此方法不会有任何停机时间。

    有关更多信息,请参阅“修改 Amazon RDS 数据库实例”。

  • 首先在原始主实例中修改 tempdb,然后手动执行故障转移,最后在新的主实例中修改 tempdb。此方法需要停机。

    有关更多信息,请参阅 重启中的数据库实例