hmahdavi Asked: 2022-06-10 01:40:52 +0800 CST2022-06-10 01:40:52 +0800 CST 2022-06-10 01:40:52 +0800 CST 为什么不通过收缩来减小数据库日志文件的大小? 772 我使用 SQL 服务器数据库。为了减少数据库日志文件,我将数据库的恢复模式设置为简单,然后收缩数据库,但日志文件没有效果。 什么是问题? sql-server shrink 2 个回答 Voted Best Answer Tibor Karaszi 2022-06-10T06:01:24+08:002022-06-10T06:01:24+08:00 不要缩小整个数据库。它太不精确了。始终以单个文件为目标。即,使用 DBCC SHRINKFILE。 日志文件不收缩的原因是最后一个虚拟日志文件正在使用中。ldf 文件分为 Virtual Log Files (VLF),ldf 文件只能从文件末尾收缩,去除未使用的 VLF。显然您在文件末尾使用了 VLF,否则文件会缩小。 您要做的是清空日志(如果在简单恢复中,则使用 CHECKPOINT 命令,如果在完全恢复中,则执行日志备份),然后执行 DBCC SHRINKFILE 命令。您可能必须多次重复这些步骤,直到最后一个所需的 VLF 进入未使用状态并且可以删除。 这是我写的一篇文章,其中包含更多细节。这是另一个关于为什么通常收缩文件是个坏主意的原因。 SQLpro 2022-06-10T05:42:34+08:002022-06-10T05:42:34+08:00 事务日志用于存储增量值,而事务用于在执行数据修改(INSERT、UPDATE、DELETE...)之前保存先前的值,以防这些修改被取消。不同的事务在此文件中按顺序生成许多行,并且不同的用户事务是交错的。 尝试减小事务日志的大小通常不是一个好主意,并且可能会失败,尤其是在以下情况下: 很久以前开始有一个仍然活动的事务(不是由 COMMIT 或 ROLLBACK 终止) 日志大小已经最小化 日志中装载了大量事务... 一般来说,减少事务日志的大小是只应在特殊情况下进行的操作,例如在其大小变得非常巨大的情况下。事务日志的大小约为数据库总大小的 10% 到 20% 被认为是正常的。 事实上,事务文件的大小大幅减少和过低的事实将不可避免地迫使它增长,这种增长是对性能有害的操作......
不要缩小整个数据库。它太不精确了。始终以单个文件为目标。即,使用 DBCC SHRINKFILE。
日志文件不收缩的原因是最后一个虚拟日志文件正在使用中。ldf 文件分为 Virtual Log Files (VLF),ldf 文件只能从文件末尾收缩,去除未使用的 VLF。显然您在文件末尾使用了 VLF,否则文件会缩小。
您要做的是清空日志(如果在简单恢复中,则使用 CHECKPOINT 命令,如果在完全恢复中,则执行日志备份),然后执行 DBCC SHRINKFILE 命令。您可能必须多次重复这些步骤,直到最后一个所需的 VLF 进入未使用状态并且可以删除。
这是我写的一篇文章,其中包含更多细节。这是另一个关于为什么通常收缩文件是个坏主意的原因。
事务日志用于存储增量值,而事务用于在执行数据修改(INSERT、UPDATE、DELETE...)之前保存先前的值,以防这些修改被取消。不同的事务在此文件中按顺序生成许多行,并且不同的用户事务是交错的。
尝试减小事务日志的大小通常不是一个好主意,并且可能会失败,尤其是在以下情况下:
一般来说,减少事务日志的大小是只应在特殊情况下进行的操作,例如在其大小变得非常巨大的情况下。事务日志的大小约为数据库总大小的 10% 到 20% 被认为是正常的。
事实上,事务文件的大小大幅减少和过低的事实将不可避免地迫使它增长,这种增长是对性能有害的操作......