RDS for SQL Server收缩数据库
操作场景
华为云SQL Server提供存储过程,用于收缩数据库的数据文件和日志文件,以释放磁盘部分空间。
操作步骤
连接RDS for SQL Server实例,执行以下命令,进行数据库收缩。
EXEC [master].[dbo].[rds_shrink_database] @DBName = 'myDBName';
参数
myDBName: 要收缩的数据库名称。如果未指定,则默认对所有数据库进行收缩。
结果
A.结果集
返回多个结果集,每个结果对应指定数据库(或所有数据库)的每个文件的相关信息。结果集结构如下:
列名称 |
说明 |
DbId |
当前收缩的文件的数据库标识号。 |
FileId |
当前收缩的文件的文件标识号。 |
CurrentSize |
文件当前占用的 8 KB 页数。 |
MinimumSize |
文件最低可以占用的 8 KB 页数。 此数字对应于文件的大小下限或最初创建大小。 |
UsedPages |
文件当前使用的 8 KB 页数。 |
EstimatedPages |
数据库引擎估计文件能够收缩到的 8 KB 页数。 |
B. 消息
打印命令执行进度。
最佳实践
Ø 在执行会产生大量未用空间的操作(如重启)后,执行收缩操作最有效
Ø 大多数数据库都需要一些可用空间,以供常规日常操作使用。 如果反复收缩数据库,并且它的大小再次增长,那么常规操作可能需要收缩空间。 在这种情况下,反复收缩数据库是一种无谓的操作。
Ø 收缩操作不保留数据库中索引的碎片状态,通常还会在一定程度上增加碎片。 此类碎片是不要反复收缩数据库的另一个原因。
故障排除
l 文件未收缩
1. 如果在执行存储过程后文件大小未改变,请运行以下SQL,验证文件是否有足够的可用空间:
SELECT name, size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMB FROM sys.database_files;
2. 如果要收缩的数据库文件大小不超过50MB,对该文件的收缩将不起作用。且会打印相关提示。如:
l 收缩操作受阻
基于行版本控制的隔离级别下运行的事务可能会阻止收缩操作。若要解决此问题,请执行下列任务之一:
² 终止阻止收缩操作的事务。
² 终止收缩操作。 如果收缩操作终止,所有已完成的工作都会保留。
² 不执行任何操作,并允许收缩操作等到阻塞事务完成。
示例
收缩指定数据库
以下示例将 dbtest2 数据库进行收缩。
EXEC [master].[dbo].[rds_shrink_database] @DBName = 'dbtest2';
执行结果如下:
收缩所有数据库
以下示例将收缩所有数据库。
EXEC [master].[dbo].[rds_shrink_database];
- 点赞
- 收藏
- 关注作者
评论(0)