sys.dm_db_xtp_memory_consumers (Transact-SQL)

适用于:SQL ServerAzure 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  

另请参阅

后续步骤