我了解 sql server 将更新写入内存中的数据页(使它们变脏),并在向用户发送提交通知之前将 tlog 写入磁盘。
这个问题是在以下任一情况下提出的:
- 将脏页从内存刷新到磁盘后
- 或者在重新启动后 sql 崩溃
sql server 如何知道哪些脏页(由于最近的一组 tlogs 导致的数据更改)已写入磁盘或尚未写入磁盘?
我了解 sql server 将更新写入内存中的数据页(使它们变脏),并在向用户发送提交通知之前将 tlog 写入磁盘。
这个问题是在以下任一情况下提出的:
sql server 如何知道哪些脏页(由于最近的一组 tlogs 导致的数据更改)已写入磁盘或尚未写入磁盘?
参考:
正如 Sean Gallardy 在评论中提到的,SQL Server 不需要知道哪些脏页被写入磁盘。SQL Server 只需要知道哪些页面是脏的。
这里的关键是所有脏页,事务提交与否无关紧要。
崩溃后的数据库引导页面具有最后一个检查点的日志序列号。这就是 SQL Server 知道从哪里开始崩溃恢复的方式。