报告 内存中 OLTP 数据库引擎中的数据库级内存消耗者。 视图为数据库引擎使用的每个内存消耗者返回一行。
有关详细信息,请参阅内存中 OLTP(内存中优化)。
适用于:SQL Server(SQL Server 2014 到当前版本)。 |
列名 |
数据类型 |
说明 |
|---|---|---|
memory_consumer_id |
bigint |
内存消耗者的 ID(内部)。 |
memory_consumer_type |
int |
内存消耗者的类型:
|
memory_consumer_type_desc |
nvarchar(64) |
内存消耗者的类型:VARHEAP、HASH 或 PGPOOL。
|
memory_consumer_desc |
nvarchar(64) |
对内存消耗者实例的说明:
|
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 |
消耗者的内部地址。 仅限内部使用。 |
注释
在输出中,数据库级分配器指用户表、索引和系统表。 object_id = NULL 的 VARHEAP 指分配给具有可变长度列的表的内存。
权限
如果您对当前数据库拥有 VIEW DATABASE STATE 权限,将返回所有行。 否则,将返回一个空行集。
如果您没有 VIEW DATABASE 权限,将为表中您拥有 SELECT 权限的行返回所有列。
只会为拥有 VIEW DATABASE STATE 权限的用户返回系统表。
示例
-- 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