题 Tempdb日志文件用法


看到测试服务器将tempdb日志文件增长到8 GB,在负载测试的几个小时内分配了12 GB。 tempdb数据文件几乎没有文件空间使用。在tempdb中运行DBCC OPENTRAN,没有打开的事务超过几秒钟。我正在运行SQL Server 2005并且读取快照隔离已关闭。

如何确定消耗tempdb日志的内容?


6
2018-06-24 15:25






答案:


Tempdb的日志与用户数据库中的日志有几点不同。

在tempdb中,只记录UNDO信息而不是REDO和UNDO,因为tempdb中的事务只是回滚,永远不会前滚。这是因为tempdb从未运行崩溃恢复,因此永远不会使用REDO信息。如果这些术语对您没有意义,请参阅我的TechNet杂志文章 了解SQL Server中的日志记录和恢复。但请注意,所有对tempdb进行更改的操作  被记录 - tempdb不是'未记录'。

与其他数据库日志一样,Tempdb的日志不会清除/截断(再次查看文章)。在tempdb中,日志将在检查点上截断(与常规SIMPLE恢复模型中一样),但检查点不会像在用户数据库中那样经常自动发生。在用户数据库中,检查点会尝试限制运行崩溃恢复所需的时间(通过将脏页强制转换为磁盘,从而限制必须执行的REDO恢复的数量)以及批量更新页面更新以减少整体执行的I / O量。

因此,tempdb中的检查点仅在tempdb日志使用率达到日志总大小的某个比例时发生,大约70%,因为恢复时间无关紧要。

总而言之,您的tempdb日志的行为与预期完全一致。

希望这可以帮助。


5
2018-06-24 15:46



我没有意识到tempdb日志的行为与用户数据库不同 - 谢谢! - Chad Miller
是的 - 它并不常见。干杯 - Paul Randal


tempdb的日志就像任何其他事务日志一样增长。所有内容都会记录到下一个检查点,此时日志条目将被标记为可以覆盖。默认情况下,检查点每分钟运行一次,所以如果你在tempdb中发生了很多事情(并且因为你正在进行负载测试,那么tempdb中可能会发生很多事情)那么日志会像这样增长。

如果您的负载测试与生产负载相匹配,那么您可以预期生产tempdb日志也会增长到此大小。


2
2018-06-24 15:37





您可以使用SQL事件探查器查看哪些用户/应用程序正在执行需要tempdb存储的操作。


0
2018-06-24 15:34