Flo*_*ian 5 sql-server checkpoint sql-server-2016
我目前正在开发一个测试系统,并且由于我想要优化的查询的性质,我正在尝试尽可能模拟“冷”读取。其中一部分是在执行查询之前清除缓冲区缓存。从我可以找到的所有内容中,应该在检查点期间写入脏缓冲区页面。但是,即使在发出 CHECKPOINT 之后,缓冲池中似乎仍然有 169 个我的数据库的脏页(通过 评估SELECT * FROM sys.dm_os_buffer_descriptors WHERE database_id=7 AND is_modified=1
)。
我对检查点或 sys.dm_os_buffer_descriptors 的内容有什么误解吗?如果没有,为什么我应该写掉它们之后我仍然有脏页?
手册CHECKPOINT
应该将所有脏页写入磁盘。它针对为您的连接处于活动状态的数据库执行此操作,而不是针对所有数据库。确保当前数据库的名称database_id=7
是:
USE [YourDatabaseName];
GO
CHECKPOINT;
GO
SELECT *
FROM sys.dm_os_buffer_descriptors
WHERE database_id = 7 AND is_modified = 1;
Run Code Online (Sandbox Code Playgroud)
请参阅检查点如何工作以及记录的内容:
数据库的所有脏数据文件页面都写入磁盘(自从磁盘读取或自上次检查点以来在内存中发生更改的所有页面),无论进行更改的事务的状态如何。
姓名 | Transact-SQL 接口 | 描述 |
---|---|---|
手动的 | CHECKPOINT [checkpoint_duration] | 当您执行 Transact-SQL CHECKPOINT 命令时发出。手动检查点发生在您的连接的当前数据库中... |
需要注意的是一帮的事情能引起脏页显示在sys.dm_os_buffer_descriptors
所有显式(用户发起)后的写操作完成。其中一些可能是为了响应SELECT
查询:
或者由于与特定 SQL Server 功能相关的后台任务:
这不是一个详尽的列表,但可以让您了解,除了插入、更新和删除之外,您可能会出于多种原因看到脏页。
归档时间: |
|
查看次数: |
188 次 |
最近记录: |