sys.dm_db_xtp_checkpoint_files (Transact-SQL)

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

显示有关内存中 OLTP 检查点文件的信息,包括文件大小、物理位置和事务 ID。

注意

对于尚未关闭的当前检查点,新文件的状态列 sys.dm_db_xtp_checkpoint_files 将为“正在构造”。 当自上次检查点以来有足够的事务日志增长或发出 CHECKPOINT 命令时,检查点会自动关闭。 有关详细信息,请参阅 CHECKPOINT (Transact-SQL)

内存优化文件组在内部使用仅追加文件存储内存中表的插入和删除行。 有两种类型的文件。 数据文件包含插入的行,而增量文件包含对已删除行的引用。

SQL Server 2014 (12.x) 与较新版本大不相同,在 SQL Server 2014进行了讨论。

有关详细信息,请参阅 为内存优化对象创建和管理存储。

SQL Server 2016 (13.x) 及更高版本

下表介绍从 SQL Server 2016(13.x)开始的列sys.dm_db_xtp_checkpoint_files

列名称 类型 描述
container_id int 容器的 ID(以 FILESTREAM 类型 sys.database_files表示),数据或增量文件是其中的一部分。 与 sys.database_files(Transact-SQL)中的file_id联接。
container_guid uniqueidentifier 根文件、数据文件或增量文件的容器 GUID。 与表中的file_guidsys.database_files联接。
checkpoint_file_id uniqueidentifier 检查点文件的 GUID。
relative_file_path nvarchar(256) 文件相对于映射到的容器的路径。
file_type smallint -1 免费

用于数据文件的 0。

1 用于 DELTA 文件。

2(根文件)

3 用于大型数据文件
file_type_desc nvarchar(60) FREE - 保留为 FREE 的所有文件都可用于分配。 免费文件的大小可能会因系统的预期需求而异。 最大大小为 1 GB。

DATA - 数据文件包含已插入内存优化表中的行。

DELTA - Delta 文件包含对已删除数据文件中的行的引用。

ROOT - 根文件包含内存优化和本机编译对象的系统元数据。

LARGE DATA - 大型数据文件包含插入 (n)varchar(max) 和 varbinary(max) 列中的值,以及作为内存优化表中列存储索引的一部分的列段。
internal_storage_slot int 内部存储数组中的文件的索引。 NULL 对于 ROOT 或非状态 1
checkpoint_pair_file_id uniqueidentifier 对应的 DATA 或 DELTA 文件。 NULL 对于 ROOT。
file_size_in_bytes bigint 磁盘上的文件的大小。
file_size_used_in_bytes bigint 对于仍在填充的检查点文件对,此列将在下一个检查点的后面更新。
logical_row_count bigint 对于数据,插入的行数。

对于 Delta,在考虑删除表后删除的行数。

对于 Root,为 NULL。
state smallint 0 - 预创建

1 - 正在建设中

2 - ACTIVE

3 - 合并目标

8 - 等待日志截断
state_desc nvarchar(60) PRECREATED - 许多检查点文件已预先分配,以最大程度地减少或消除在执行事务时分配新文件的任何等待。 这些文件的大小可能会有所不同,并根据工作负荷的估计需求创建。 它们不包含任何数据。 这是具有MEMORY_OPTIMIZED_DATA文件组的数据库中的存储开销。

UNDER CONSTRUCTION - 这些检查点文件正在构造中,这意味着它们是根据数据库生成的日志记录填充的,并且尚不是检查点的一部分。

ACTIVE - 这些行包含以前关闭的检查点中的插入/删除行。 它们包含区域在数据库重启时应用事务日志的活动部分之前读取到内存中的表的内容。 我们预计,这些检查点文件的大小大约是内存优化表内存中大小的 2 倍,假设合并操作与事务工作负荷保持同步。

MERGE TARGET - 合并操作的目标 - 这些检查点文件存储合并数据行(由合并策略标识的源文件)。 合并已安装之后,MERGE TARGET 转换为 ACTIVE 状态。

等待日志截断 - 安装合并后,MERGE TARGET CFP 是持久检查点的一部分,合并源检查点文件将转换为此状态。 对于具有内存优化表的数据库的操作正确性,需要处于此状态的文件。 例如,用于从持久检查点恢复以便及时返回。
lower_bound_tsn bigint 文件中事务的下限; NULL 如果状态不在 (1, 3) 中)。
upper_bound_tsn bigint 文件中事务的上限; NULL 如果状态不在 (1, 3) 中)。
begin_checkpoint_id bigint 开始检查点的 ID。
end_checkpoint_id bigint 结束检查点的 ID。
last_updated_checkpoint_id bigint 更新此文件的最后一个检查点的 ID。
encryption_status smallint 0, 1, 2
encryption_status_desc nvarchar(60) 0 => UNENCRYPTED

1 => 使用密钥 1 加密

2 => 使用密钥 2 进行加密。 仅适用于活动文件。

SQL Server 2014 (12.x)

下表描述了 SQL Server 2014(12.x)的列。sys.dm_db_xtp_checkpoint_files

列名称 类型 描述
container_id int 容器的 ID(以 FILESTREAM 类型 sys.database_files表示),数据或增量文件是其中的一部分。 与 sys.database_files(Transact-SQL)中的file_id联接。
container_guid uniqueidentifier 数据或差异文件所属的容器的 GUID。
checkpoint_file_id GUID 数据或差异文件的 ID。
relative_file_path nvarchar(256) 数据或差异文件的路径(相对于容器的位置)。
file_type tinyint 0 表示数据文件。

1 表示差异文件。

NULL 如果状态列设置为 7,
file_type_desc nvarchar(60) 文件类型:DATA_FILE、DELTA_FILE,或者 NULL 状态列设置为 7。
internal_storage_slot int 内部存储数组中的文件的索引。 NULL 如果状态列不是 2 或 3,则为
checkpoint_pair_file_id uniqueidentifier 对应的数据或差异文件。
file_size_in_bytes bigint 所用文件的大小。 NULL 如果状态列设置为 5、6 或 7,则为 7。
file_size_used_in_bytes bigint 所用文件的已用大小。 NULL 如果状态列设置为 5、6 或 7,则为 7。

对于仍在填充的检查点文件对,此列将在下一个检查点的后面更新。
inserted_row_count bigint 数据文件中的行数。
deleted_row_count bigint 差异文件中删除的行数。
drop_table_deleted_row_count bigint 删除表影响的数据文件中的行数。 当状态列等于 1 时,应用于数据文件。

显示从已删除表中删除的行计数。 在对已删除表中的行完成内存垃圾回收并且实施了检查点之后,汇总 drop_table_deleted_row_count 统计信息。 如果在删除表统计信息反映在此列中之前重启 SQL Server,则统计信息将作为恢复的一部分进行更新。 恢复过程不会从已删除表中加载行。 已删除表的统计信息会在加载阶段中进行汇总并在此列中进行报告(恢复完成时)。
state int 0 - 预创建

1 - 正在建设中

2 - ACTIVE

3 - 合并目标

4 - 合并源

5 - 备份/HA 必需

6 - 过渡到墓碑

7 - TOMBSTONE
state_desc nvarchar(60) PRECREATED - 将保留预先分配的少量数据和增量文件对(也称为检查点文件对),以最大程度地减少或消除在执行事务时分配新文件的任何等待。 它们创建的数据文件大小为 128 MB,增量文件大小为 8 MB,但不包含任何数据。 CFP 的数目计算为逻辑处理器或计划程序的数目(每个核心一个,无最大值),最小值为 8。 这是具有内存优化表的数据库中的固定存储开销。

UNDER CONSTRUCTION - 存储自上一个检查点以来新插入的数据行和可能删除的数据行的 CFP 集。

ACTIVE - 这些包含来自以前关闭的检查点的已插入和已删除行。 这些 CFP 包含数据库重新启动时在应用事务日志的活动部分前所需的所有已插入和已删除行。 假设合并操作与事务工作负荷当前,这些 CFP 的大小大约是内存优化表内存中大小的两倍。

MERGE TARGET - CFP 存储合并策略标识的 CFP 中的合并数据行。 合并已安装之后,MERGE TARGET 转换为 ACTIVE 状态。

MERGED SOURCE - 安装合并操作后,源 CFP 将标记为 MERGED SOURCE。 请注意,合并策略计算器可能会识别多个合并,但 CFP 只能参与一个合并操作。

BACKUP/HA 必需 - 安装合并后,MERGE TARGET CFP 是持久检查点的一部分,合并源 CFP 将转换为此状态。 为保证具有内存优化表的数据库的运行正确性,需要处于此状态的 CFP。 例如,用于从持久检查点恢复以便及时返回。 在日志截断点移出其事务范围后,可以将 CFP 标为进行垃圾回收。

转换到 TO TOMBSTONE - 内存中 OLTP 引擎不需要这些 CFP,并且可以进行垃圾回收。 此状态指示这些 CFP 在等待后台线程将它们转换为下一个状态(即 TOMBSTONE)。

TOMBSTONE - 这些 CFP 正在等待由文件流垃圾回收器进行垃圾回收。 (sp_filestream_force_garbage_collection (Transact-SQL)
lower_bound_tsn bigint 文件中包含事务的下限。 NULL 如果状态列不是 2、3 或 4,则为 4。
upper_bound_tsn bigint 文件中包含事务的上限。 NULL 如果状态列不是 2、3 或 4,则为 4。
last_backup_page_count int 上次备份时确定的逻辑页计数。 状态列设置为 2、3、4 或 5 时应用。 NULL 如果页计数未知,则为 。
delta_watermark_tsn int 写入此差异文件的上个检查点的事务。 这是差异文件的水印。
last_checkpoint_recovery_lsn nvarchar(23) 仍需要文件的上个检查点的恢复日志序列号。
tombstone_operation_lsn nvarchar(23) tombstone_operation_lsn 落后于日志截断日志序列号之后,文件将删除。
logical_deletion_log_block_id bigint 仅适用于状态 5。

权限

需要对数据库拥有 VIEW DATABASE STATE 权限。

SQL Server 2022 及更高版本的权限

需要对数据库拥有 VIEW DATABASE PERFORMANCE STATE 权限。

用例

可以按如下所示估算内存中 OLTP 使用的存储总量:

-- total storage used by In-Memory OLTP  
SELECT SUM (file_size_in_bytes)/(1024*1024) as file_size_in_MB  
FROM sys.dm_db_xtp_checkpoint_files;

若要查看按状态和文件类型划分的存储利用率细分,请运行以下查询:

SELECT state_desc  
 , file_type_desc  
 , COUNT(*) AS [count]  
 , SUM(file_size_in_bytes) / 1024 / 1024 AS [on-disk size MB]   
FROM sys.dm_db_xtp_checkpoint_files  
GROUP BY state, state_desc, file_type, file_type_desc  
ORDER BY state, file_type;