适用于:SQL Server
Azure 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;