【问题标题】:Shrink the database in SQL Server在 SQL Server 中收缩数据库
【发布时间】:2015-12-21 09:13:14
【问题描述】:

我有一个几乎已满的数据库,我们有一些选择来处理这个问题:

  1. 我们可以增加 db 文件大小
  2. 收缩数据库

在我选择第一个选项之前,我想知道如何检查数据库大小以及其中实际有多少数据,以便我可以缩小数据库以获得一些可用空间。

【问题讨论】:

  • 在大多数情况下,您会希望增加数据文件的大小。缩小数据文件可能会导致各种麻烦。有几篇关于这方面的文章,包括这篇brentozar.com/archive/2009/08/…
  • 那么我可以进行重组或重建以释放一些空间吗?

标签: sql-server size shrink


【解决方案1】:

所以看看你在哪里有未使用的空间,什么文件有多大使用下面的查询......

Use DatabaseName
GO

Select name                                             AS [FileName]
     , size/128.0                                       AS [FileSize(MB)]
     , fileproperty(name, 'SpaceUsed')/128.0            AS [Space_Used(MB)]
     , (size - fileproperty(name, 'SpaceUsed')) /128.0  AS [FreeSpace(MB)] 
From dbo.sysfiles
GO

最后,当您决定收缩具有大量可用空间的文件时,您可以使用 DBCC shrinkfile 命令来执行此操作。

USE DatabaseName
GO
DBCC SHRINKFILE ('FileName', 10)   --<-- will shrink it to 10 MB
GO

注意

如果任何未使用的空间被 BLOB 数据类型(文本、ntext、xml 等)列占用,您可能无法收回未使用的空间,除非您删除并重新创建表。

【讨论】:

  • 谢谢,但你能告诉我哪一列是数据库的大小,哪一列是现在数据库中的实际数据量
【解决方案2】:

您可以通过几种不同的方式获取此信息。在 SSMS 中,您可以右键单击数据库,选择属性并查看文件。您的数据和日志文件将显示一个指示大小的“初始”值。

您可以右键单击数据库,单击任务和收缩,然后文件和数据文件应该是默认显示的。这将显示您的大小和可用空间。

您还可以运行一个脚本,向您显示数据库的所有大小和位置信息。您可以通过快速的 Google 搜索找到其中的几个。

此外,有一些内置的 SP 可以为您提供here 所述的信息。第四个查询特别显示了可用空间的数量。

【讨论】:

  • 在建议的解决方案中注意sp_msforeachdb,我自己没有体验过,但是 sp_msforeachdb 有遗漏数据库的坏习惯。
  • 我运行了查询,这个输出告诉我 SizeGB 是实际数据大小,SizeMB 是数据库大小,其中包括一些未重组的空间
  • 我删除了那个链接@M.Ali,因为我错过了,但你是绝对正确的。
  • 但是我从这些查询中获得的任何大小信息都只是关于 db 大小,我在哪里可以找到查询来查看文件实际上有多少数据?
  • 第四个查询就是你要找的。编辑了答案。
猜你喜欢
  • 2016-06-20
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
相关资源
最近更新 更多