如何优化我的 Amazon RDS for SQL Server 数据库实例中的存储占用?

2 分钟阅读
0

我的 Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server 数据库实例使用了超出预期的空间。我想优化我的磁盘存储。

简短描述

您可以使用 Amazon CloudWatch 中的 FreeStorageSpace 指标监控数据库实例的可用存储空间。**FreeStorageSpace ** 指标并未描述 SQL Server 引擎如何使用可用存储。经常监控此指标并打开存储自动扩缩功能,以确保存储空间不会耗尽。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

Amazon RDS for SQL Server 实例处于 Storage Full(存储已满)状态

当您的 Amazon RDS 实例卡滞在 Storage Full(存储已满)状态时,您无法执行基本操作。有关详细信息,请参阅如何解决 Amazon RDS 数据库实例用尽存储空间时出现的问题?

某些 RDS for SQL Server 数据库实例对修改存储的方式有限制。如果您的数据库实例不符合修改条件,则 Amazon RDS 控制台中的 Allocated storage(分配的存储空间)选项将被禁用。要在修改选项不可用时扩展实例的存储空间,请使用本机备份和恢复将数据迁移到新实例。确保新实例已配置每秒输入/输出 (IOPS) 或具有通用 (SSD) 存储类型。或者,使用数据迁移工具迁移到新实例。有关详细信息,请参阅修改 Amazon RDS 数据库实例

要查看数据库实例的有效存储选项,请运行 describe-valid-db-instance-modifications 命令:

describe-valid-db-instance-modifications

**注意:**使用磁性存储的 RDS for SQL Server 实例不支持扩展存储和存储自动扩缩

对于打开存储自动扩缩的实例,您只能在某些情况下扩展存储空间。有关详细信息,请参阅使用 Amazon RDS 存储自动扩展功能自动管理容量。此外,只有当最大存储阈值不等于或超过存储增量时,您才能扩展存储空间。有关详细信息,请参阅限制

RDS for SQL Server 实例的存储占用

要获取有关 RDS for SQL Server 数据库实例物理磁盘空间使用情况的信息,请运行与以下示例类似的查询:

SELECT D.name AS [database_name]    
    , F.name AS [file_name]
    , F.type_desc AS [file_type]
    , CONVERT(decimal(10,2), F.size * 0.0078125) AS [size_on_disk_mb]
    , CONVERT(decimal(10,2), F.max_size * 0.0078125) AS [max_size_mb]
FROM sys.master_files AS F
INNER JOIN sys.databases AS D
    ON F.database_id = D.database_id;

包含 ROWS 的文件含有数据,包含 LOGS 的文件代表正在进行的事务。

有关详细信息,请参阅 Microsoft 网站上的 sys.master_files (Transact-SQL)

**注意:**sys.master_files 系统视图显示 tempdb 的起始大小。它不能反映 tempdb 的当前大小。

要查看 tempdb 的当前大小,请运行以下查询:

select name AS [database_name], physical_name AS [file_name],
convert(decimal(10,2),size*0.0078125) AS [size_on_disk_mb]
from tempdb.sys.database_files;

在优化存储之前,请确保您了解 SQL Server 引擎如何使用存储。SQL Server 引擎存储大致定义为以下类别:

数据库文件

您可以将单个数据库使用的总存储空间细分为当前活动数据库中的行、索引和可用空间。要细分总存储空间,请运行以下查询:

EXEC sp_spaceused;

事务日志文件

要确定事务日志使用的存储量,请运行以下查询:

DBCC SQLPERF(LOGSPACE)

您可能会在事务日志中看到可用空间。要释放过多的可用空间,请运行 DBCC SHRINKFILE 命令。有关详细信息,请参阅 Microsoft 网站上的 DBCC SHRINKFILE (Transact-SQL)

要减少为事务日志分配的过多可用空间,请使用 ALTER DATABASE (transact-SQL) 文件和文件组选项。这些选项配置数据库的自动增长设置。有关详细信息,请参阅 Microsoft 网站上的 ALTER DATABASE (Transact-SQL) 文件和文件组选项

临时数据库 (tempdb)

SQL Server tempdb 会自动增长。如果 tempdb 占用大量可用存储空间,您可以缩减 tempdb 数据库

**注意:**如果您缩减 tempdb 数据库,则在运行该命令后,请查看 SQL Server Management Studio (SSMS) 的 Message(消息)选项卡中是否有错误消息。

如果您收到“DBCC SHRINKFILE: Page could not be moved because it is a work table page”(DBCC SHRINKFILE:无法移动该页面,因为这是工作表页)错误消息,请参阅 Microsoft 网站上的 DBCC FREESYSTEMCACHE (Transact-SQL)DBCC FREEPROCCACHE (Transact-SQL)。您也可以重启数据库实例以清除 tempdb。

处于 Storage Full(存储已满)状态的数据库实例可能无法重启。如果发生这种情况,请增加为数据库实例分配的存储空间,然后尝试再次重启。有关详细信息,请参阅如何解决 Amazon RDS 数据库实例用尽存储空间时出现的问题?

数据库索引

如果您将大量可用存储空间专用于索引,则可以通过索引调整来节省一些空间。要获取有关索引使用情况的信息,请运行 sys.dm_db_index_usage_stats 动态管理视图。这可以帮助您评估调整优先级。有关详细信息,请参阅 Microsoft 网站上的 sys.dm_db_index_usage_stats (Transact-SQL)

跟踪文件

跟踪文件,包括 C2 审计跟踪文件和转储文件,可能会占用大量磁盘空间。Amazon RDS 会自动删除超过 7 天的跟踪和转储文件,但您也可以调整跟踪文件的保留设置。有关详细信息,请参阅设置跟踪和转储文件的保留期

Amazon S3 集成占用的空间

如果您将 RDS 数据库实例与 Amazon S3 集成在一起,则可能已将占用空间的文件上传到 D: 驱动器。要检查您的 S3 集成占用了多少空间,请运行命令列出数据库实例上的文件。有关详细信息,请参阅列出 RDS 数据库实例上的文件

CDC

对于开启了 CDC 的数据库,日志文件大小会根据源表或数据库的更改频率而增加。存储空间最终可能会耗尽。如果日志磁盘已满,则 CDC 无法处理更多交易。

审计

如果没有为实例正确配置审计,日志可能会呈指数级增长并影响存储。有关详细信息,请参阅 SQL Server Audit

C2 审计模式将大量事件信息保存到日志文件中。日志文件可能会快速增长并使实例进入 Storage Full(存储已满)状态。有关详细信息,请参阅 Microsoft 网站上的 C2 audit mode (server configuration option)

此外,如果您打开查询存储等功能,则您的资源利用率可能会受到影响。

相关信息

Amazon RDS for Microsoft SQL Server

监控 Amazon RDS 实例中的指标

Amazon RDS 数据库实例耗尽存储空间

将 Microsoft SQL Server 数据库迁移到 AWS Cloud