Sql Server LDF 文件占用太大空间

Qwe*_*rty 11 sql-server

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

Ale*_*lok 10

1.为什么日志文件占用这么多空间(30GB)?

  • 或者因为你的恢复不简单而 ldf 最终增长到这样的大小
  • 或者因为有一个大型的一次性 DML 操作
  • 或者由于其他原因,正如@sepupic 在另一个答案中所指出的

2.如何释放空间?

  • 如果恢复不是简单的:

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

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

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


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

我强烈建议不要这样做。Aaron Bertrand 的显着相关帖子

有些事情你不想做:

分离数据库,删除日志文件,然后重新附加。我无法强调这有多危险。您的数据库可能无法恢复,可能会出现可疑情况,您可能必须恢复备份(如果有),等等。


Qwe*_*rty 7

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

那是因为Autogrowth / Maxsize设置了200,000 MB

2. how can I free up the space?

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

ALTER DATABASE myDatabaseName
SET RECOVERY SIMPLE
GO
DBCC SHRINKFILE (myDatabaseName_log, 1)
GO
ALTER DATABASE myDatabaseName_log
SET RECOVERY FULL
Run Code Online (Sandbox Code Playgroud)

我还在Autogrowh/Maxsize数据库属性中设置1000Limited(见下图)。

SSMS 中的 <code>Database Propertis => Files</code>

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


sep*_*pic 5

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

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

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

select log_reuse_wait_desc
from sys.databases
where name = 'myDB';
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能释放空间?

首先,您应该使用上面的查询确定原因,然后您应该修复它,例如,如果它坏了,replication您应该删除它或修复它。