文档首页/ 云数据库 RDS/ 最佳实践/ RDS for SQL Server/ RDS for SQL Server收缩数据库
更新时间:2024-08-15 GMT+08:00
分享

RDS for SQL Server收缩数据库

操作场景

云数据库 RDS for SQL Server提供使用存储过程收缩指定数据库的数据文件和日志文件的大小,以释放磁盘部分空间。

前提条件

成功连接RDS for SQL Server实例。通过SQL Server客户端连接目标实例,具体操作请参见通过公网连接SQL Server实例

功能限制

  • 数据库文件大小超过50MB,才可以使用该功能。如果要收缩的数据库文件大小不超过50MB,对该文件的收缩将不起作用。并且会显示相关提示。如下图所示:

  • 基于行版本控制的隔离级别下运行的事务可能会阻止收缩操作。若要解决此问题,请执行下列操作之一:
    1. 终止阻止收缩操作的事务。
    2. 终止收缩操作。 如果收缩操作终止,所有已完成的工作都会保留。
    3. 不执行任何操作,并允许收缩操作等到阻塞事务完成。

最佳实践

在计划收缩数据库文件时,请考虑以下信息:

  • 在执行会产生大量未用空间的操作(如重启)后,执行收缩操作最有效。
  • 大多数数据库都需要一些可用空间,以供常规日常操作使用。如果反复收缩数据库,并且它的大小再次增长,那么常规操作可能需要收缩空间。在这种情况下,反复收缩数据库是一种无意义的操作。
  • 收缩操作不保留数据库中索引的碎片状态,通常还会在一定程度上增加碎片。此类碎片是不要反复收缩数据库的另一个原因。

操作步骤

  1. 执行以下命令,进行数据库收缩。

    EXEC [master].[dbo].[rds_shrink_database] @DBName='myDbName';

    表1 参数说明

    参数

    说明

    myDbName

    收缩指定数据库的数据库名称。如果未指定,默认收缩所有数据库。

    执行结果集如下图所示,每个结果对应指定数据库(或所有数据库)的每个文件的相关信息。

    图1 结果集
    表2 结果集参数说明

    列名称

    说明

    DbId

    当前收缩文件的数据库标识号。

    FileId

    当前收缩文件的文件标识号。

    CurrentSize

    文件当前占用的8KB页数。

    MinimumSize

    文件最低可以占用的8KB页数。此数字对应于文件的大小下限或最初创建大小。

    UsedPages

    文件当前使用的8KB页数。

    EstimatedPages

    数据库引擎估计文件能够收缩到的8KB页数。

  2. 执行成功后,系统会显示执行进度,并最终进行如下提示:

    HW_RDS_Process_Successful: Shrink Database Done.

故障排除

如果在执行数据库收缩后文件大小未改变,请执行以下SQL,验证文件是否有足够的可用空间:

SELECT name, size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMB FROM sys.database_files;

示例

  1. 执行以下命令,对dbtest2数据库进行收缩。

    EXEC [master].[dbo].[rds_shrink_database] @DBName = 'dbtest2';

    执行结果如下图所示:

    图2 执行结果
  2. 执行以下命令,对所有数据库进行收缩。

    EXEC [master].[dbo].[rds_shrink_database];

相关文档