我在SQL Server数据库中有一张具有70多个记录的桌子,我丢下了该表(一次性的东西)以释放磁盘上的空间,但看起来大小并没有变化太大。我确实看到我可以将DB缩小到最低。

那是这样做的吗?

我上次使用SQL Server Management Studio进行了收缩,花了几个小时才能完成。有更快的方法吗?

enter image description here

有帮助吗?

解决方案

放下表将释放数据库中的空间,但不会将空间释放回Windows。这需要收缩数据库文件。但是,我们不希望数据库文件已满。我们想要很多可用空间,以便我们加载更多数据,我们不必经常播放数据文件。这会导致物理磁盘上数据文件的碎片化。

对于更快的缩小,没有办法使其更快。缩小数据库需要读取和重写数据库中的大多数数据,以便可以将所有空格从数据库文件释放回OS。所有这些IO都需要时间,并引起许多分裂问题。

其他提示

您将需要非常仔细地阅读有关DBCC收缩的信息。

http://technet.microsoft.com/en-us/library/ms189493.aspx

通常,您不想将数据库缩小到磁盘上最小的尺寸。您想离开SQL Server有足够的空间,因此它不必自动增长太多。这里的答案有很多有用的信息:

https://stackoverflow.com/questions/45222719/to-dbcc-shrinkdatabase-or-not-to-dbcc-shrinkdatabase-thats-thathats-thathats-the-question

收缩是非常昂贵的过程,可能需要几个小时。为了最有效地使用空间,您可以将表转移到新的文件组中,并以群集索引预处理并以前删除。我个人更喜欢这一点,因为以几个步骤进行“缩小”和更容易预测的“收缩”更容易,因此更容易计划。当您开始DBCC收缩时,您不知道要花多少时间。

更新(感谢Mrdennny指向这一点):这是一种非常具体的方法,只有在您有一个只读数据库(如数据仓库)时才能使用吸引一致性。为了节省时间并获得其最大性能,您可以将数据库切换到简单的恢复模型并使用Tableock提示 - 这将使系统可以使用最小的日志记录,并且在交易日志中进行较少的著作。

查看本文: http://itknowledgeexchange.techtarget.com/sql-server/deleting-lob-data-and-shrinking-the-database/

“我们提出的解决方案实际上很简单。进行数据库删除为正常。然后备份并恢复数据库。然后进行收缩,然后重建群集索引,以解决缩小问题,缩小问题将引入碎片问题。”

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top