看到testing服务器将tempdb日志文件增长到8 GB,在负载testing的几个小时内分配的12 GB内使用。 tempdb数据文件几乎没有文件空间使用情况。 在tempdb中运行DBCC OPENTRAN,几秒钟内没有打开的事务。 我正在运行SQL Server 2005,读快照隔离已closures。
我怎样才能确定什么是消费tempdb日志?
Tempdb的日志与用户数据库中的日志不同,有几种方式。
在tempdb中,只有UNDO信息被logging而不是REDO和UNDO,因为tempdb中的事务只能回滚,从不前滚。 这是因为tempdb从来没有在其上运行崩溃恢复,所以REDO信息从不使用。 如果这些条款对您没有意义,请参阅TechNet杂志的“ 了解SQL Server中的日志logging和恢复 ”一文。 但请注意,所有对tempdb进行更改的操作都将被logging – tempdb不是“未logging”的。
Tempdb的日志不会像其他数据库日志那样清除/截断(再次参阅文章)。 在tempdb中,日志会在检查点截断(就像在普通的SIMPLE恢复模式中一样),但检查点并不像自己的用户数据库那样自动发生。 在用户数据库中,检查点会尝试限制运行崩溃恢复所需的时间(通过强制脏页面到磁盘,从而限制必须执行的REDO恢复量),并批量更新页面以减less整体执行的I / O数量。
因此,tempdb中的检查点仅在tempdb日志使用率达到日志总大小的一定比例时出现,大约为70%,因为恢复时间不相关。
总而言之,您的tempdb日志的行为完全如预期。
希望这可以帮助。
tempdb的日志就像任何其他事务日志一样增长。 一切都会被logging下来,直到下一个检查点,此时日志条目被标记为可以被覆盖。 默认情况下,检查点每隔一分钟左右运行一次,所以如果tempdb中有很多事情发生(因为你正在进行负载testing,tempdb中可能会有很多东西),那么日志将会像这样增长。
如果您的负载testing符合您的生产负载,那么您可以预计生产tempdb日志也会增长到这个大小。
您可以使用SQL事件探查器来查看哪些用户/应用程序正在做需要tempdb存储的事情。