我们已经从一个两位数兆字节大小的数据库中删除了很大一部分数据,现在我们想把一些空间放回操作系统。该数据库目前约有80 %未使用的空间。它再也不会达到以前的规模了(负载已经转移到其他地方了)。
我们尝试在单独服务器(非生产)上的数据库副本上运行SHRINKDATABASE。运行了2天(在我们的硬件上),它能够释放空间。
我假设它在生产中在数据库上花费的时间要长得多,因为这是大量使用的(不过,现在主要用于查询,而不是插入)。
在生产系统上,只有几个小时的停机时间(一次)是可以接受的。在较长的时间内,一些性能下降也是可以接受的。
对于如何释放这么多未使用的空间,而不需要过多的停机时间,或者在此过程中引入严重的性能退化,有什么想法吗?
发布于 2013-11-23 23:02:55
刚删除了我以前的答案,因为我开始为这类问题提出一个典型的问题。如果这个标记不起作用,在这里给你一个简短的答案。
你有几个选择。这里有一个很大的“警告”--收缩并不总是一件好事,它会破坏你的索引并花费一些时间。所以要谨慎行事。
DBCC SHRINKFILE将其缩小为较小的“块”。优点:不需要开发,可能比迁移更少的停机时间。缺点:你仍然在缩小一个数据库,你仍然需要处理零碎的索引,但是你还是应该做一些索引重建,因为你已经删除了很多数据。https://dba.stackexchange.com/questions/53787
复制相似问题