对SQL Server CheckPoint的常见理解误区
有关CheckPoint的概念对大多数SQL Server开发或DBA人员都不陌生。但是包括我自己在内,大家对于CheckPoint都或多或少存在某些误区,最近和高文佳同学(感谢高同学的探讨)关于该处进行过一些探讨,整理出来几个误区。
1.CheckPoint实例级别,而不是数据库级别 CheckPoint的时间虽然可以在实例级别进行设置,但CheckPoint的过程是以数据库为粒度。从CheckPoint在Redo和Undo的作用来看,CheckPoint是为了优化IO和减少Recovery时间,而Recovery是需要日志支持,因此日志是数据库级别的概念,因此可以知道CheckPoint是以数据库为单位进行的。 我们来做一个简单的实验,分别设置两个连接A和B,A和B使用不同的数据库并修改数据产生脏数据,在A上进行了CheckPoint后,A连接的数据库脏页全部写入磁盘,而B连接产生的脏页依然驻留在Buffer中,因此可以确定CheckPoint是数据库级别而不是服务器级别。 图1.CheckPoint是数据库级别的 2.由于日志增长导致的自动CheckPoint会将所有数据库的脏页写入磁盘 事实证明,这也是错误的,自动CheckPoint仅仅会将某些脏页或日志过多的数据库脏页写入磁盘。可以同样通过图1的例子进行。 3.CheckPoint仅仅将已经提交的脏数据写入磁盘 这同样是错误的,无论事务是否提交,所产生的脏数据都会被CheckPoint写入磁盘。例证可以参看我的博文:再谈SQL Server中日志的的作用中有关CheckPoint的实验。 4.如果一个实例上有多个数据库,则CheckPoint是并行的 错误,通过3502跟踪标记来看,CheckPoint是串行的,也就是一个数据库CheckPoint完了才会继续下一个。如图2所示。 查看本栏目更多精彩内容:http://www.bianceng.cn/database/SQLServer/ 图2.串行CheckPoint 我们可以注意到,CheckPoint使用的是同一个Spid。 (编辑:滁州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |