sys.dm_db_xtp_checkpoint_files(Transact-SQL)

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

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

注释

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

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

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

列名称 类型 说明
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。
状态 smallint 0 - 预创建

1 - 正在建设中

2 - 主动

3 - MERGE 目标

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

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

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

MERGE TARGET - 合并操作的目标 - 这些检查点文件存储由合并策略识别的源文件合并数据行。 合并安装后, MERGE TARGET会切换到ACTIVE状态。

等待日志截断——一旦合并安装完成且 MERGE 目标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 => 未加密

1 => 使用密钥 1 加密

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

Permissions

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

SQL Server 2022 及更高版本的权限

需要 VIEWDATABASE 数据库中的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;