sys.dm_db_xtp_memory_consumers (Transact-SQL)
适用于:SQL Server
Azure SQL 数据库 Azure SQL 托管实例
报告内存中 OLTP 数据库引擎中的数据库级内存使用者。 视图为数据库引擎使用的每个内存消耗者返回一行。 使用此 DMV 查看内存如何分布到不同的内部对象。
有关详细信息,请参阅 内存中 OLTP 概述和使用方案。
注意
此系统动态管理视图的输出可能有所不同,具体取决于安装的 SQL Server 版本。
列名称 | 数据类型 | 说明 |
---|---|---|
memory_consumer_id |
bigint | 内存消耗者的 ID(内部)。 |
memory_consumer_type |
int | 内存消耗者的类型: 0 = 聚合。 (聚合两个或多个使用者的内存使用情况。它不应显示。 2 = VARHEAP (跟踪可变长度堆的内存消耗。3 = HASH (跟踪索引的内存消耗。4 = PGPOOL (DB 页池:跟踪用于运行时操作的数据库页池的内存消耗。例如,表变量和一些可序列化扫描。每个数据库只有一个此类型的内存使用者。 |
memory_consumer_type_desc |
nvarchar(64) | 内存使用者的类型: VARHEAP 、 HASH 或 PGPOOL 。0 - (不应显示) 2 - VARHEAP 3 - HASH 4 - PGPOOL |
memory_consumer_desc |
nvarchar(64) | 内存使用者实例的说明。 有关详细信息,请查看下面的表。 |
object_id |
bigint | 所分配的内存所属的对象 ID。 负值表示系统对象。 |
xtp_object_id |
bigint | 对应于内存优化表的内存中 OLTP 对象 ID。 |
index_id |
int | 消耗者的索引 ID(如果有)。 NULL 表示基表。 |
allocated_bytes |
bigint | 为此消耗者保留的字节数。 |
used_bytes |
bigint | 此消耗者使用的字节数。 仅适用于 VARHEAP . |
allocation_count |
int | 分配的数量。 |
partition_count |
int | 仅供内部使用。 |
sizeclass_count |
int | 仅供内部使用。 |
min_sizeclass |
int | 仅供内部使用。 |
max_sizeclass |
int | 仅供内部使用。 |
memory_consumer_address |
varbinary | 消耗者的内部地址。 仅限内部使用。 |
下表描述了列中指定的 memory_consumer_type
内存使用者:
内存使用者 | 说明 | 类型 |
---|---|---|
256K page pool |
检查点活动期间使用的内存池。 | PGPOOL |
4K page pool |
检查点活动期间使用的内存池。 | PGPOOL |
Checkpoint table |
仅供内部使用。 | VARHEAP |
Ckpt file table |
仅供内部使用。 | VARHEAP |
Ckpt file watermark table |
仅供内部使用。 | VARHEAP |
Database internal heap |
用于分配内存转储中包含的数据库数据,并且不包括用户数据。 | VARHEAP |
Database user heap |
用于为数据库分配用户数据(行)。 | VARHEAP |
Encryption table |
仅供内部使用。 | VARHEAP |
Hash index |
跟踪索引的内存消耗。 指示 object_id 表和 index_id 哈希索引本身。 |
HASH |
Large Rows File table |
仅供内部使用。 | VARHEAP |
LOB Page Allocator |
大型行使用的堆内存。 | VARHEAP |
Logical range index partition table |
仅供内部使用。 | VARHEAP |
Logical root fragment table |
仅供内部使用。 | VARHEAP |
Logical Root table |
仅供内部使用。 | VARHEAP |
Logical Sequence Object table |
仅供内部使用。 | VARHEAP |
Physical range index partition table |
仅供内部使用。 | VARHEAP |
Physical root fragment table |
仅供内部使用。 | VARHEAP |
Physical Root table |
仅供内部使用。 | VARHEAP |
Physical Sequence object table |
仅供内部使用。 | VARHEAP |
Range index heap |
范围索引用于分配 Bw 树页的专用堆。 | VARHEAP |
Storage internal heap |
仅供内部使用。 | VARHEAP |
Storage user heap |
仅供内部使用。 | VARHEAP |
Table heap |
内存中表使用的堆内存。 | VARHEAP |
Tail cache 256K page pool |
仅供内部使用。 | PGPOOL |
Tx Segment table |
仅供内部使用。 | VARHEAP |
注解
当内存优化表具有列存储索引时,系统会使用一些内部表来跟踪列存储索引的数据。 有关这些内部表及其内存消耗的示例查询的详细信息,请参阅sys.memory_optimized_tables_internal_attributes(Transact-SQL)。
权限
如果您对当前数据库拥有 VIEW DATABASE STATE 权限,将返回所有行。 否则,将返回一个空行集。
如果没有 VIEW DATABASE 权限,将针对具有 SELECT 权限的表中的行返回所有列。
在 SQL Server 2019 (15.x) 和以前的版本中,系统表仅针对具有 VIEW DATABASE STATE 权限的用户返回。
对于 SQL Server 2022(16.x)及更高版本,需要对数据库具有 VIEW DATABASE PERFORMANCE STATE 权限。
示例
查询当前数据库中的内存使用者
针对包含内存优化表的示例 WideWorldImporters
数据库运行以下查询:
SELECT CONVERT(CHAR(10), OBJECT_NAME(object_id)) AS Name,
memory_consumer_type_desc,
memory_consumer_desc,
object_id,
index_id,
allocated_bytes,
used_bytes
FROM sys.dm_db_xtp_memory_consumers;
下面是结果集:
Name memory_consumer_type_desc memory_consumer_desc object_id index_id allocated_bytes used_bytes
---------- ------------------------- -------------------------------------- ----------- ----------- ----------------- ------------
NULL VARHEAP Range index heap -15 1 131072 176
NULL VARHEAP Physical range index partition table -15 NULL 0 0
NULL VARHEAP Range index heap -14 2 131072 192
NULL VARHEAP Range index heap -14 1 131072 208
NULL VARHEAP Large Rows File table -14 NULL 0 0
NULL HASH Hash index -13 1 2048 2048
NULL VARHEAP Encryption table -13 NULL 0 0
NULL HASH Hash index -10 2 32768 32768
NULL HASH Hash index -10 1 32768 32768
NULL VARHEAP Tx Segment table -10 NULL 65536 544
NULL HASH Hash index -11 1 32768 32768
NULL VARHEAP Checkpoint table -11 NULL 131072 320
NULL HASH Hash index -12 1 8192 8192
NULL VARHEAP Ckpt file table -12 NULL 131072 3120
NULL HASH Hash index -9 1 2048 2048
NULL VARHEAP Ckpt file watermark table -9 NULL 131072 1280
NULL VARHEAP Range index heap -7 1 262144 976
NULL VARHEAP Physical Sequence Object table -7 NULL 65536 864
NULL HASH Hash index -3 1 2048 2048
NULL VARHEAP Physical root fragment table -3 NULL 0 0
NULL HASH Hash index 0 2 8192 8192
NULL HASH Hash index 0 1 32768 32768
NULL VARHEAP Physical Root table NULL NULL 327680 12160
NULL PGPOOL Tail cache 256K page pool 0 NULL 262144 262144
NULL PGPOOL 256K page pool 0 NULL 35389440 18874368
NULL PGPOOL 64K page pool 0 NULL 131072 65536
NULL PGPOOL 4K page pool 0 NULL 49152 40960
NULL VARHEAP Storage internal heap NULL NULL 786432 4816
NULL VARHEAP Storage user heap NULL NULL 262144 22496
ColdRoomTe VARHEAP Range index heap 1179151246 3 196608 800
ColdRoomTe VARHEAP Range index heap 1179151246 2 196608 800
memory_opt VARHEAP Range index heap 1211151360 2 131072 208
VehicleTem VARHEAP Range index heap 1243151474 2 11796480 1181824
ColdRoomTe VARHEAP Table heap 1179151246 NULL 65536 384
memory_opt VARHEAP Table heap 1211151360 NULL 0 0
VehicleTem VARHEAP Table heap 1243151474 NULL 33423360 32802112
VehicleTem VARHEAP Range index heap 1243151474 2 131072 160
VehicleTem VARHEAP LOB Page Allocator 1243151474 NULL 0 0
VehicleTem VARHEAP Table heap 1243151474 NULL 0 0
NULL VARHEAP Range index heap -15 1 327680 176
NULL VARHEAP Logical range index partition table -15 NULL 0 0
NULL HASH Hash index -7 1 32768 32768
NULL VARHEAP Logical Sequence Object table -7 NULL 65536 600
NULL HASH Hash index -3 1 2048 2048
NULL VARHEAP Logical root fragment table -3 NULL 0 0
NULL HASH Hash index 0 1 32768 32768
NULL VARHEAP Logical Root table NULL NULL 327680 11120
NULL PGPOOL Tail cache 256K page pool 0 NULL 262144 0
NULL PGPOOL 256K page pool 0 NULL 10485760 0
NULL PGPOOL 64K page pool 0 NULL 131072 0
NULL PGPOOL 4K page pool 0 NULL 32768 0
NULL VARHEAP Database internal heap NULL NULL 1048576 8016
NULL VARHEAP Database user heap NULL NULL 65536 1024
从此 DMV 分配和使用的总内存与sys.dm_db_xtp_table_memory_stats中的对象级别相同。
SELECT SUM(allocated_bytes) / (1024 * 1024) AS total_allocated_MB,
SUM(used_bytes) / (1024 * 1024) AS total_used_MB
FROM sys.dm_db_xtp_memory_consumers;
下面是结果集:
total_allocated_MB total_used_MB
------------------ --------------------
92 51