更新每个数据库表字段后,日志文件有多大?

时间:2011-02-18 21:20:19

标签: sql-server sql-server-2005 logfiles

我的一般问题是,假设您有一个大小为20G的SQL Server 2005数据库和一个空的日志文件。如果您运行一系列更新,每个表和每行只触摸一次,那么日志文件是否会增长到与数据库相同的大小?或者这取决于其他因素?

由于我正在执行的数据库更新,我问这个问题。我有一些专有软件使用的数据库。对每个表和每个字段进行更新。该软件没有详细的输出,只有“未完成”/“完成”的复选框。因为没有描述性输出,我试图弄清楚如何判断它是否接近结束。

那么,当触及所有内容时,日志文件的大小是否与数据库大小相同?或者日志文件是否包含不依赖于数据库大小的不同信息?

2 个答案:

答案 0 :(得分:5)

根据经验,为任何更新生成的日志大小约为更新大小的1.5倍。因此,如果您更新20Gb的数据,则会生成30Gb的日志。

但有些事情需要考虑:

  1. 生成的日志大小不一定需要转换为日志文件大小。在SIMPLE恢复模型下,一旦事务提交,就可以自动回收使用的日志文件(为了简洁我省略了一些细节),因此通过不断回收使用的日志,30gb日志大小可以放入1gb文件中。在FULL和BULK恢复模型下,执行数据库日志备份时,日志会被类似地回收。因此,如果您在一个事务中更新所有内容,那么您的日志应该循环使用而不会增长。

  2. 可以最少地记录某些操作。 TRUNCATE,INSERT BULK是典型的例子。最小的日志记录只占正常日志记录的一小部分。

  3. 现在您应该查看使用的日志百分比(DBCC SQLPERF(logspace)),并监控是否发生了log growth events

答案 1 :(得分:0)

不是您要找的答案,但我认为不太可能以任何有意义的方式与数据库的大小相关。等一下。 :)