SQL Server 上的 Amazon Relational Database Service (Amazon RDS) 数据库实例占用空间超过预期。为什么会出现这种情况?我该如何优化磁盘存储?

您可以使用 FreeStorageSpace Amazon CloudWatch 指标监控 RDS 数据库实例的可用存储空间,但该指标无法说明 SQL Server 引擎的可用存储空间使用方式。

要为 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 的文件表示正在处理的事务。

在开始优化前,确保了解 SQL Server 引擎是如何使用存储的。SQL Server 引擎存储是使用以下类别进行广泛定义的:

数据库文件

使用如下查询,可在当前活跃数据库中将单个数据库使用的总存储空间细分为行、索引和空闲空间:

EXEC sp_spaceused;

事务日志文件

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

DBCC SQLPERF(LOGSPACE)

预计交易日志中存在空闲空间,但您可按照 DBCC SHRINKFILE (Transact-SQL) 中的说明取消分配多余空闲空间。

您可使用 ALTER DATABASE 文件和文件组选项 (Transact-SQL) 为事务日志减少分配多余空闲空间,从而为数据库配置自动增长设置。

临时数据库 (tempdb)

SQL Server tempdb 会自动扩展。如果 tempdb 消耗了大量可用存储,您可以按照收缩 tempdb 数据库中的说明进行收缩。

数据库索引

如果专为索引分配了大量可用存储空间,您或许能够通过索引优化来节省一些空间。您可以通过运行 sys.dm_db_index_usage_stats (Transact-SQL) 动态管理视图收集有关索引使用的详细信息,从而帮助您评估优化优先级。


此页面对您有帮助吗? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间:2015 年 10 月 30 日

更新时间:2018 年 4 月 2 日