收缩数据库

本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2014 中使用 Object 收缩数据库。

收缩数据文件通过将数据页从文件末尾移动到更靠近文件开头的未占用的空间来恢复空间。 在文件末尾创建足够的可用空间时,可以解除分配文件末尾的数据页并将其返回到文件系统。

在您开始之前

局限性与限制

  • 数据库不能小于数据库的最小大小。 最小大小是数据库最初创建时指定的大小,或在使用如 DBCC SHRINKFILE 这样的文件大小调整操作时设置的最后一个明确大小。 例如,如果数据库最初创建的大小为 10 MB 且增加到 100 MB,则即使数据库中的所有数据都已删除,数据库的大小也可能减小为 10 MB。

  • 在备份数据库时,无法收缩数据库。 相反,您无法在数据库正在执行收缩操作时备份数据库。

  • 遇到 xVelocity 内存优化列存储索引时,DBCC SHRINKDATABASE 将失败。 在遇到列存储索引之前完成的工作将成功,因此数据库可能更小。 若要完成 DBCC SHRINKDATABASE,请在执行 DBCC SHRINKDATABASE 之前禁用所有列存储索引,然后重新生成列存储索引。

建议

  • 查看数据库中的当前可用(未分配)空间量。 有关详细信息,请参阅 显示数据库的数据和日志空间信息

  • 当您计划收缩数据库时,请考虑以下信息:

    • 收缩操作在创造大量未使用空间的操作(例如截断表或删除表等操作)后最有效。

    • 大多数数据库都需要一些可用空间,以供常规日常操作使用。 如果反复收缩数据库并注意到数据库大小会再次增长,这表明被收缩的空间在常规操作中是需要的。 在这些情况下,反复收缩数据库是浪费的作。

    • 收缩操作不会保留数据库中索引的碎片化状态,并且通常会增加碎片化程度。 这是不重复收缩数据库的另一个原因。

    • 除非有特定要求,否则不要将AUTO_SHRINK数据库选项设置为 ON。

安全

权限

要求具有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员身份。

使用 SQL Server Management Studio

收缩数据库

  1. 对象资源管理器中,连接到 SQL Server 数据库引擎的实例,然后展开该实例。

  2. 展开数据库,然后右键单击要压缩的数据库。

  3. 指向任务,指向收缩,然后单击数据库

    数据库
    显示所选数据库的名称。

    当前分配的空间
    显示所选数据库的已用空间和未使用空间总数。

    可用空间
    显示所选数据库的日志和数据文件中可用空间的总和。

    在释放未使用的空间之前重新组织文件
    选择此选项相当于执行 DBCC SHRINKDATABASE,并指定目标百分比选项。 清除此选项等效于使用 TRUNCATEONLY 选项执行 DBCC SHRINKDATABASE。 默认情况下,打开对话框时不会选择此选项。 如果选择此选项,用户必须指定目标百分比选项。

    收缩后文件的最大可用空间
    输入数据库收缩后在数据库文件中留下的最大可用空间百分比。 允许的值为 0 到 99。

  4. 单击 “确定”

使用 Transact-SQL

缩减数据库

  1. 连接到数据库引擎。

  2. 在标准栏中,单击“新建查询”

  3. 将以下示例复制并粘贴到查询窗口中,然后单击 执行。 此示例使用 DBCC SHRINKDATABASE 来减小 UserDB 数据库中数据和日志文件的大小,并允许数据库中有 10 的可用空间百分比。

DBCC SHRINKDATABASE (UserDB, 10);
GO

后续操作:缩减数据库后

被移动用来收缩文件的数据可以分布到文件的任何可用位置。 这将导致索引碎片并使搜索索引范围的查询变慢。 若要消除碎片,请考虑在收缩后重新生成文件的索引。

另请参阅

收缩文件
sys.databases (Transact-SQL)
sys.database_files(Transact-SQL)
DBCC (Transact-SQL)
DBCC SHRINKFILE (Transact-SQL)
数据库文件和文件组