RDS for SQL Server收缩数据库
操作场景
云数据库 RDS for SQL Server提供使用存储过程收缩指定数据库的数据文件和日志文件的大小,以释放磁盘部分空间。
前提条件
成功连接RDS for SQL Server实例。通过SQL Server客户端连接目标实例,具体操作请参见通过公网连接SQL Server实例。
功能限制
- 基于行版本控制的隔离级别下运行的事务可能会阻止收缩操作。若要解决此问题,请执行下列操作之一:
- 终止阻止收缩操作的事务。
- 终止收缩操作。 如果收缩操作终止,所有已完成的工作都会保留。
- 不执行任何操作,并允许收缩操作等到阻塞事务完成。
最佳实践
在计划收缩数据库文件时,请考虑以下信息:
- 在执行会产生大量未用空间的操作(如重启)后,执行收缩操作最有效。
- 大多数数据库都需要一些可用空间,以供常规日常操作使用。如果反复收缩数据库,并且它的大小再次增长,那么常规操作可能需要收缩空间。在这种情况下,反复收缩数据库是一种无意义的操作。
- 收缩操作不保留数据库中索引的碎片状态,通常还会在一定程度上增加碎片。此类碎片是不要反复收缩数据库的另一个原因。
操作步骤
- 执行以下命令,进行数据库收缩。
EXEC [master].[dbo].[rds_shrink_database] @DBName='myDbName';
表1 参数说明 参数
说明
myDbName
收缩指定数据库的数据库名称。如果未指定,默认收缩所有数据库。
执行结果集如下图所示,每个结果对应指定数据库(或所有数据库)的每个文件的相关信息。
图1 结果集
表2 结果集参数说明 列名称
说明
DbId
当前收缩文件的数据库标识号。
FileId
当前收缩文件的文件标识号。
CurrentSize
文件当前占用的8KB页数。
MinimumSize
文件最低可以占用的8KB页数。此数字对应于文件的大小下限或最初创建大小。
UsedPages
文件当前使用的8KB页数。
EstimatedPages
数据库引擎估计文件能够收缩到的8KB页数。
- 执行成功后,系统会显示执行进度,并最终进行如下提示:
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;