Tempdb中的检查点
原文:Whatdoes checkpoint do for tempdb?
原文地址:http://www.sqlskills.com/BLOGS/PAUL/post/What-does-checkpoint-do-for-tempdb.aspx
上周我写了一篇深度分析检查点是如何工作的文章(见How do checkpoints work and what gets logged,译文)。在约一年前,我写了一篇关于为什么一个繁忙的系统中tempdb有很多脏页,今天我想进一步澄清这个问题以及tempdb中的检查点是如何工作的。想要了解缓冲区中的内容,看文章(Inside the Storage Engine: What's in the buffer pool?)。
只有在tempdb日志文件达到70%满时,才会启动检查点——这可以防止tempdb日志继续增长(注意:就像用户数据库一样,一个长时间运行的事务可能劫持日志文件,防止它被清除)。
如果你看过我上面说的第一篇文章,你就会明白:用户数据库中的检查点发生时,所有的脏页都会被写到磁盘中(,当然还有其他一些动作),但是这不会在tempdb中发生。因为tempdb在故障(crash)时并不需要恢复,所以根本就没有必要强迫将脏页写到磁盘中,除非lazywriter进程为了给其他数据页腾空间才会将部分脏页写入磁盘。
在SIMPLE恢复模式下,检查点的另一个动作就是检查日志文件中VLF是否已经不活动了。(见文章 TechNet Magazine: feature article on understandinglogging and recovery 和Inside the Storage Engine: More on the circularnature of the log)。这个过程允许日志回绕,覆盖写日志文件从而避免了增长——为了管理日志大小,Tempdb也有这个过程。