我有一个变得非常大的ms sql数据库。经过检查,我发现在某些表中有一堆未使用的空间。我不做太多的物理删除,所以我不认为它只是删除了记录。DBCC收缩不会使文件变小。但是,如果我将表转储到一个新的空数据库中,大小下降了大约80%。在fresh数据库中,我最终得到了大约1.5 7gb,而不是当前数据库中该表中的7 7gb。这就好像sql server分配了太多的内存。以前有人遇到过这种情况吗?我希望能够通过删除未使用的已分配空间来收缩表,而不必创建一个全新的数据库。
其他信息:
使用了完整恢复模式。我会试着重建索引,我想已经有一段时间了。ldf每天都会被缩小,使用一些奇怪的存储过程来截断它们。
发布于 2008-09-05 18:18:03
我发现如果你不小心备份你的转换日志文件( LDF),你会得到类似这样的行为。我再怎么强调良好的备份“卫生”也不为过。它不仅可以在出现问题时节省您的时间,而且我还可以帮助维护一个很好的、严密的数据库。
发布于 2008-09-05 18:23:47
我不会做太多物理删除
表的更新情况如何,碎片级别是多少。运行DBCC SHOWCONTIG,如果索引高度碎片化,则重新构建索引。之后,使用TRUNCATE_ONLY命令执行备份日志,然后执行收缩命令
发布于 2008-09-05 18:11:55
在选项中,您可以指定要增长多少。默认情况下,我认为它是10%,所以假设有一个200MB的数据库,当你填满最后一个页面时,它会再分配20MB的页面空间。在7 7GB时,它将分配700MB。
我不知道在创建数据库后可以在哪里修改它,但我知道当您创建数据库时它就有了。谷歌上的一些工作很可能会为你揭开答案。
注意:我的答案不是如何修复它,而是如何防止/解释为什么您可能会看到所有这些未分配的空间。
https://stackoverflow.com/questions/46439
复制相似问题