为什么我的 SQL 服务器日志文件在发出完整警告后仍有 99% space 可用?

Why does my SQL Server logfile have 99% space available after giving me a full warning?

删除大量记录时,出现此错误:

The transaction log for database 'databasename' is full

我发现this answer很有帮助,推荐:

  1. Right-click your database in SQL Server Manager, and check the Options page.
  2. Switch Recovery Model from Full to Simple
  3. Right-click the database again. Select Tasks Shrink, Files Shrink the log file to a proper size (I generally stick to 20-25% of the size of the data files)
  4. Switch back to Full Recovery Model
  5. Take a full database backup straight away

问题: 在第 3 步中,当我转到 shrink > files 并从 file type 中选择 log下拉菜单,它告诉我分配的 space 的 99% 是免费的。

在分配的 ~4500MB space 中,有 ~4400MB 空闲(数据文件大小为 ~3000MB)。

是不是说我可以走了,不用缩水了?

我不明白这个。考虑到我最初收到的警告,为什么会这样?

我不是一个喜欢夸张的人,但是关于 SQL 服务器事务日志的文章确实有数十亿篇。

Reader 的摘要版本:如果您一次删除 1,000,000 行,日志将会变大,因为它正在写入这 1,000,000 行删除,以防它必须回滚事务。保存这些记录所需的 space 在事务提交之前不会被释放。如果您的日志不足以容纳 1,000,000 次删除,日志将被填满,抛出您看到的错误,并回滚整个事务。然后所有 space 很可能会被释放。现在你有一个很大的日志,里面有很多免费的 space.

您的日志文件可能达到了 4.5gb 的限制,而且它不会再变大了。为避免将来填满您的日志,请将您的交易分块到更小的数量,例如一次删除 1,000 条记录。压缩操作将减小文件的物理大小,例如从 4.5gb 减小到 1gb。

https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-shrinkfile-transact-sql?view=sql-server-2017