误区15:只写#检查站提交到磁盘

错误

这种误解是由于一个全面的了解,日志和太多的people.checkpoint回收系统的缺乏会写网页,改变内存磁盘自最后一个检查点,或读脏页到内存的最后关卡。交易是否已提交或不影响页面将被写入回到检查站的盘。但对tempdb的例外,因为TempDB的检查站事件周期不包含步骤写回磁盘的脏页。

如果你想知道更多,请阅读下面的文章:



TechNet杂志文章:了解日志和恢复SQL Server


博客:检查点是如何工作的


博客:做什么检查tempdb

您可以使用以下两个跟踪标记来查看检查点是如何工作的。



3502:当检查点开始和结束时,将相关信息写入错误日志。


3504:在错误日志的检查点将写回的磁盘的信息写入磁盘。

为了使用这个追溯标签,你必须打开所有的线程,否则你将不会看到任何错误日志中。使用DBCC TRACEON(3502, 3504,1)为所有线程打开这两跟踪标签。

下面的代码可以证明检查站将写回磁盘的未提交的脏页,遵循以下步骤。
复制代码代码如下所示:
创建数据库checkpointtest;去用checkpointtest;去
创建表T1(C1国际身份,C2 char(8000)default'a ');创造
聚集在t1c1 T1指数(C1);去
SET NOCOUNT ON;去
检查点;去
DBCC TRACEON(3502, 3504,1);去



以下交易将产生超过10MB的脏页,其次是检查点
{代码}
开始,转到T1默认值,转到1280
检查点;去
{ HTML }


日志是你看到的:



很明显,当未提交事务时,仍会将脏页写入磁盘。