sys.dm_db_xtp_memory_consumers (Transact-SQL)
适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
报告内存中 OLTP 数据库引擎中的数据库级内存消耗者。 视图为数据库引擎使用的每个内存消耗者返回一行。 使用此 DMV 查看内存在不同内部对象之间的分布方式。
有关详细信息,请参阅 内存中 OLTP(内存中优化)。
列名称 | 数据类型 | 说明 |
---|---|---|
memory_consumer_id | bigint | 内存消耗者的 ID(内部)。 |
memory_consumer_type | int | 内存消耗者的类型: 0=聚合。 (聚合两个或更多使用者的内存使用量。不应显示它。) 2=VARHEAP(跟踪长度可变的堆的内存占用情况。) 3=HASH(跟踪索引的内存占用情况。) 5 = 数据库页池 (跟踪用于运行时操作的数据库页池的内存消耗。例如,表变量和一些可序列化的扫描。每个数据库只有一个此类型的内存使用者。) |
memory_consumer_type_desc | nvarchar(64) | 内存消耗者的类型:VARHEAP、HASH 或 PGPOOL。 0 - (不应显示它。) 2 - VARHEAP 3 - HASH 5 - PGPOOL |
memory_consumer_desc | nvarchar(64) | 对内存消耗者实例的说明: VARHEAP: 数据库堆。 用于为数据库分配用户数据(行)。 数据库系统堆。 用于分配将包含在内存转储中但不包含用户数据的数据库数据。 范围索引堆。 由范围索引用于分配 BW 页的专用堆。 HASH:没有说明,因为object_id指示表和哈希索引本身index_id。 PGPOOL:对于数据库,只有一个页池数据库 64K 页池。 |
object_id | bigint | 所分配的内存所属的对象 ID。 负值表示系统对象。 |
xtp_object_id | bigint | 内存优化表的对象 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 | 消耗者的内部地址。 仅限内部使用。 |
xtp_object_id | bigint | 与内存优化表相对应的In-Memory OLTP 对象 ID。 |
备注
在输出中,数据库级分配器指用户表、索引和系统表。 VARHEAP with object_id
= NULL
是指分配给具有可变长度列的表的内存。
权限
如果您对当前数据库拥有 VIEW DATABASE STATE 权限,将返回所有行。 否则,将返回一个空行集。
如果您没有 VIEW DATABASE 权限,将为表中您拥有 SELECT 权限的行返回所有列。
只会为拥有 VIEW DATABASE STATE 权限的用户返回系统表。
一般备注
当内存优化表具有列存储索引时,系统会使用一些内部表来跟踪列存储索引的数据,这些内部表会占用一些内存。 有关这些内部表和显示其内存消耗的示例查询的详细信息,请参阅 sys.memory_optimized_tables_internal_attributes (Transact-SQL) 。
示例
查询当前数据库中的内存使用者。
-- memory consumers (database level)
SELECT OBJECT_NAME(object_id), *
FROM sys.dm_db_xtp_memory_consumers;
使用方案
-- memory consumers (database level)
select convert(char(10), object_name(object_id)) as Name,
convert(char(10),memory_consumer_type_desc ) as memory_consumer_type_desc, object_id,index_id, allocated_bytes, used_bytes
from sys.dm_db_xtp_memory_consumers
下面是包含列子集的输出。 数据库级别的分配器引用用户表、索引和系统表。 具有 object_id
= NULL
最后一行) (VARHEAP 是指分配给表的数据行的内存 (在此处示例中,它 t1
) 。 分配的字节数(转换为 MB)为 1340MB。
Name memory_consumer_type_desc object_id index_id allocated_bytes used_bytes
---------- ------------------------- ----------- ----------- -------------------- --------------------
t3 HASH 629577281 2 8388608 8388608
t2 HASH 597577167 2 8388608 8388608
t1 HASH 565577053 2 1048576 1048576
NULL HASH -6 1 2048 2048
NULL VARHEAP -6 NULL 0 0
NULL HASH -5 3 8192 8192
NULL HASH -5 2 8192 8192
NULL HASH -5 1 8192 8192
NULL HASH -4 1 2048 2048
NULL VARHEAP -4 NULL 0 0
NULL HASH -3 1 2048 2048
NULL HASH -2 2 8192 8192
NULL HASH -2 1 8192 8192
NULL VARHEAP -2 NULL 196608 26496
NULL HASH 0 1 2048 2048
NULL PGPOOL 0 NULL 0 0
NULL VARHEAP NULL NULL 1405943808 1231220560
(17 row(s) affected)
从此 DMV 分配和使用的总内存与 sys.dm_db_xtp_table_memory_stats (Transact-SQL) 中的对象级别相同。
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
-------------------- --------------------
1358 1191