Sql 数据库占用的空间比表的总和还要多
我有一个数据库占用了近7个Gig。如果我看一下桌子的使用量,应该比这个少很多,比如40兆。昨天我删除了一个很大的日志表,但我的数据库仍然显示它非常大 以下是统计数据:Sql 数据库占用的空间比表的总和还要多,sql,sql-server,Sql,Sql Server,我有一个数据库占用了近7个Gig。如果我看一下桌子的使用量,应该比这个少很多,比如40兆。昨天我删除了一个很大的日志表,但我的数据库仍然显示它非常大 以下是统计数据: database_name database_size unallocated space Umbraco_Indoorpower 6911.56 MB 859.59 MB reserved data index_size unused 31144 KB 26272 KB 3240 KB 16
database_name database_size unallocated space
Umbraco_Indoorpower 6911.56 MB 859.59 MB
reserved data index_size unused
31144 KB 26272 KB 3240 KB 1632 KB
我运行了以下命令:
DBCC SHRINKDATABASE (umbraco_indoorpower, 99);
这使我的数据库降到了2.3千兆。不过还是太大了
database_name database_size unallocated space
Umbraco_Indoorpower 2302.44 MB 1.63 MB
reserved data index_size unused
30016 KB 26200 KB 3240 KB 576 KB
我猜我没有从昨天删除的日志表中释放出所有空间。我实际运行了从tblLog中删除。也许这是错误的做法
有人知道如何释放更多空间吗?日志文件有多大?您的恢复模式是什么?上面的数据库大小
数字很可能是近7GB的日志和很少的数据。查找硬盘上的文件-您可以使用以下方法查找路径:
EXEC umbraco_indoorpower..sp_helpfile;
我敢打赌LDF是巨大的,而MDF实际上很小。在这种情况下,您可能处于完全恢复模式,并且从未进行过日志备份。如果这是真的,则可以执行以下操作:
USE umbraco_indoorpower;
GO
BACKUP LOG umbraco_indoorpower TO DISK = 'C:\some_path\umbraco.trn';
GO
DBCC SHRINKFILE(umbraco_indoorpower_log, 20); -- guessing on target MB size here
(如果您使用的是简单恢复模型,则上述操作将失败,但会有一些其他解释说明为什么日志文件很大—例如,长时间运行或未提交的事务,您的删除提交了吗?)
然后,您需要(a)设置适当的维护,包括完整/差异/日志备份,这将有助于优化日志文件的重用;或者(b)切换到简单恢复,在这种情况下,日志将自行管理
在大多数情况下,在发生灾难时,简单恢复并不能提供足够的保护,但这由您自己决定
同时,您可以随心所欲地收缩文件,但如果您保持恢复模型和事务处理方式不变,您将看到文件再次增长,明天您将返回运行shrink命令。这对你的文件来说是绝对可怕的。这就是为什么我反对像“运行收缩手术”这样的答案。我在这里谈论原因:
在任何情况下,您都有数据和日志,要缩小日志,您必须进行备份
编辑:一切现有答案已经相当不错了。我还有一个额外的解决方案:为包含数据的数据库编写脚本(SSMS UI允许您轻松地执行此操作),并在新的数据库中执行脚本
您可能也希望切换到简单日志模型(如果您没有使用完整日志模型的特殊需要)。有一件事是肯定的:您不能在完全模式下运行,也不能进行适当的事务日志管理。另一件会在SQL Server中占用更多空间的事情是Service Broker队列。在我的例子中,队列中有600万行,占用17GB @DOK不,我不认为这是因为索引。你看过上面的输出了吗?@Aaron Bertrand:我想你是对的。我在考虑索引可能(希望暂时)占用大量磁盘空间的情况。虽然我同意有时在大数据更改后移动到新数据库更简单,但我不确定simple“可能”是更好的选择。就我个人而言,我认为保持完整状态并添加适当的事务日志管理要安全得多。YMMV。虽然暂时切换到simple并返回到full可能有助于简化现有日志的转储。我建议使用simple模式,因为OP现在似乎没有tlog管理。他当然可以实现这样的事情,但也许他不需要或不想投入时间。明白,我只是不认为使用simple的一般建议对所有读者都是正确的(记住,你给出的答案不仅仅是OP)。我认为你是对的,编辑我的答案是为了更普遍地适用。