1.checkpoint是将所有脏数据写入磁盘,是将数据写入到.mdf文件中吗?
2.SQL SERVER启动数据库时一定是从最近的一次检查点开始检查事务,确定是否重做或回滚吗?其判断最近一次检查点在哪的依据是什么?
3.我做了一个这样的实验,过程是这样:
SQL SERVER数据库中有一个名为test的数据库,首先将其与SQL SERVER管理系统分离,并在另一个名为001的文件夹中拷贝一份test.mdf文件存放其中。
将原始目录下的test数据库从新添加到SQL SERVER数据库管理系统中,对其进行插入等操作后,为了表述清楚将此时状态称为状态1;
添加检查点 checkpoint 10,此时状态为状态2;
再次插入数据,此时状态为状态3.
将TEST数据库分离出SQL Server 数据库管理系统。并将此时的test.ldf日志文件拷贝到001文件夹下。
将001文件夹下的test数据库添加到SQL SERVER数据库管理系统中,按照checkpoint机制不是应该从状态2开始redo吗,实际效果是从状态1开始redo到状态3.
始终对checkpoint机制不是太理解,请大神帮忙解答一下吧,谢谢。
------解决思路----------------------
1.checkpoint是将所有脏数据写入磁盘,是将数据写入到.mdf文件中吗?
no
2.SQL SERVER启动数据库时一定是从最近的一次检查点开始检查事务,确定是否重做或回滚吗?其判断最近一次检查点在哪的依据是什么?
yes,ldf文件会有记录,这也是为什么不要看到ldf很大就停机删文件的原因之一。
3.没怎么看懂你的实验
------解决思路----------------------
1、肯定不会把所有的脏数据,都写回到mdf文件的,这样可能会导致性能瓶颈,写入量是由recovery interval (min) 参数来决定的,这个参数在性能和恢复效率之间做出平衡。
2、应该是从最近一次检查点开始的,因为之前的检查点肯定保证了对应的脏数据,已经写入到磁盘了,那么在这次checkpoint完成后到下一次 checkpoint之间,如果系统断电或者重启了,那么在重启后,就只需要扫描这次检查点后的事务。
3、你这个实验是不是用到了 跟踪标记 3502来在日志中显示 checkpoint的信息了是吧。你是怎么知道系统会从哪个状态来redo的呢?