SQL Server LDF文件占用的空间太大

时间:2019-03-01 12:27:49

标签: sql-server

为什么我的数据库日志文件占用大量空间?它几乎占了我硬盘的30GB。即使删除了1,000,000条记录,它也不会释放任何空间。
所以
1.为什么日志文件占用了这么多空间(30gb)?
2.如何释放空间?

4 个答案:

答案 0 :(得分:1)

  

1。为什么日志文件占用了这么多空间(30gb)?

  • 或者由于您的康复,最终没有SIMPLE和ldf增长到这样的规模
  • 或者因为有大量的DML一次性操作
  • 或者由于其他原因,如@sepupic在另一个答案中指出的
  

2。如何释放空间?

  • IF恢复不是SIMPLE:

    • 首先备份事务日志文件
    • 执行收缩,如DBCC SHRINKFILE(2,256)
  • 如果恢复很简单:

    • 只需将其缩小到所需的大小,例如DBCC SHRINKFILE(2,256)

如果数据库日志仍未减小到目标大小,则使用@sepupic代码片段检查确切的原因


一些成员仍然提出并建议物理删除LDF文件。

我强烈建议不要这样做。与亚伦·伯特兰(Aaron Bertrand)密切相关的post

  

一些您不想做的事情:

     

分离数据库,删除日志文件,然后重新附加。我不能   强调这可能有多危险。您的数据库可能无法恢复   起来,可能会令人怀疑,您可能必须还原到备份(如果   您有一个),等等。

答案 1 :(得分:1)

您需要进行维护工作backup the transaction log,并且 经常 :每10分钟左右一次。

每天进行一次完整备份是不够的。

或者,您可以将数据库的Recovery ModelFULL更改为SIMPLE。但是,如果这样做,您将失去执行时间点还原的能力。

答案 2 :(得分:1)

  

为什么我的数据库日志文件占用大量空间?

可能有更多原因,不仅是另一个答案中提到的2个原因。

您可以使用以下查询找到确切原因:

select log_reuse_wait_desc
from sys.databases
where name = 'myDB';

以下是BOL文章的链接,该文章描述了log_reuse_wait下的所有可能原因: sys.databases (Transact-SQL)

  

如何释放空间?

首先,您应该使用上面的查询来确定原因,然后应予以解决,例如,如果replication损坏,则应将其删除或解决。

答案 3 :(得分:0)

1. Why is the log file taking this much space (30gb)?

  这是因为Autogrowth / Maxsize被设置为200,000 MB

2. how can I free up the space?

  如Here所述,我使用了以下命令,文件现在小于200mb

ALTER DATABASE myDatabaseName
SET RECOVERY SIMPLE
GO
DBCC SHRINKFILE (myDatabaseName_log, 1)
GO
ALTER DATABASE myDatabaseName_log
SET RECOVERY FULL

我还在数据库属性中将Autogrowh/Maxsize设置为1000的{​​{1}}(请参见下图)。

<code>Database Propertis => Files</code> in SSMS

该链接介绍了更多信息,因此建议您参考该链接以获取详细描述和其他选项。
感谢@hadi提供的链接。