sys.dm_os_memory_objects (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)
返回 SQL Server 当前分配的内存对象。 可以使用 sys.dm_os_memory_objects 分析内存使用情况,并确定可能的内存泄漏。
注意
若要从 Azure Synapse Analytics 或 Analytics 平台系统(PDW)调用此名称,请使用名称 sys.dm_pdw_nodes_os_memory_objects。 Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。
列名称 | 数据类型 | 描述 |
---|---|---|
memory_object_address | varbinary(8) | 内存对象的地址。 不可为 null。 |
parent_address | varbinary(8) | 父内存对象的地址。 可以为 Null。 |
pages_allocated_count | int | 适用于:SQL Server 2008 (10.0.x) 至 SQL Server 2008 R2 (10.50.x)。 由该对象分配的页数。 不可为 null。 |
pages_in_bytes | bigint | 适用于:SQL Server 2012 (11.x) 及更高版本。 此内存对象实例分配的内存量(以字节为单位)。 不可为 null。 |
creation_options | int | 仅供内部使用。 可以为 Null。 |
bytes_used | bigint | 仅供内部使用。 可以为 Null。 |
type | nvarchar(60) | 内存对象的类型。 它指示该内存对象所属的特定组件,或指示内存对象的函数。 可以为 Null。 |
name | varchar(128) | 仅供内部使用。 Nullable。 |
memory_node_id | smallint | 该内存对象所用的内存节点的 ID。 不可为 null。 |
creation_time | datetime | 仅供内部使用。 可以为 Null。 |
max_pages_allocated_count | int | 适用于:SQL Server 2008 (10.0.x) 至 SQL Server 2008 R2 (10.50.x)。 由该内存对象分配的最大页数。 不可为 null。 |
page_size_in_bytes | int | 适用于:SQL Server 2012 (11.x) 及更高版本。 由该对象分配的页的大小(以字节为单位)。 不可为 null。 |
max_pages_in_bytes | bigint | 该内存对象曾经使用的最大内存量。 不可为 null。 |
page_allocator_address | varbinary(8) | 页分配器的内存地址。 不可为 null。 有关详细信息,请参阅 sys.dm_os_memory_clerks (Transact-SQL)。 |
creation_stack_address | varbinary(8) | 仅供内部使用。 可以为 Null。 |
sequence_num | int | 仅供内部使用。 可以为 Null。 |
partition_type | int | 适用于:SQL Server 2016 (13.x) 及更高版本。 分区的类型: 0 - 不可分区内存对象 1 - 可分区内存对象,当前未分区 2 - 可分区内存对象,由 NUMA 节点分区。 在具有单个 NUMA 节点的环境中,这相当于 1。 3 - 可分区内存对象,按 CPU 进行分区。 |
contention_factor | real | 适用于:SQL Server 2016 (13.x) 及更高版本。 指定此内存对象的争用的值,0 表示无争用。 每当在该时间段内进行反映争用的指定数目的内存分配时,该值就会更新。 仅适用于线程安全的内存对象。 |
waiting_tasks_count | bigint | 适用于:SQL Server 2016 (13.x) 及更高版本。 此内存对象的等待数。 每当从此内存对象分配内存时,此计数器就会递增。 增量是当前等待访问此内存对象的任务数。 仅适用于线程安全的内存对象。 这是一个最佳努力值,没有正确性保证。 |
exclusive_access_count | bigint | 适用于:SQL Server 2016 (13.x) 及更高版本。 指定以独占方式访问此内存对象的频率。 仅适用于线程安全的内存对象。 这是一个最佳努力值,没有正确性保证。 |
pdw_node_id | int | 适用于:Azure Synapse Analytics、Analytics Platform System (PDW) 此分发所在节点的标识符。 |
partition_type、contention_factor、waiting_tasks_count和exclusive_access_count尚未在SQL 数据库中实现。
权限
对于 SQL Server 和 SQL 托管实例,需要 VIEW SERVER STATE
权限。
在SQL 数据库基本、S0 和 S1 服务目标以及弹性池中的数据库、服务器管理员帐户、Microsoft Entra 管理员帐户或服务器角色的成员##MS_ServerStateReader##
身份是必需的。 对于所有其他 SQL 数据库服务目标,需要数据库的 VIEW DATABASE STATE
权限或 ##MS_ServerStateReader##
服务器角色中的成员身份。
SQL Server 2022 及更高版本的权限
要求对服务器具有 VIEW SERVER PERFORMANCE STATE 权限。
注解
内存对象是指多个堆。 它们所提供的分配的粒度比内存分配器所提供的分配的粒度更精细。 SQL Server 组件使用内存对象而不是内存 clerk。 内存对象使用内存分配器的页分配器接口来分配页。 内存对象不使用虚拟内存接口或共享内存接口。 根据分配模式的不同,组件可以创建不同的内存对象类型来分配任意大小的区域。
内存对象的典型页面大小为 8 KB。 但是,增量内存对象的页大小的范围可以从 512 字节到 8 KB。
注意
页大小不是最大分配。 相反,页大小是受页分配器支持,并且由内存分配器实现的分配粒度。 可从内存对象中请求大于 8 KB 的分配。
示例
以下示例返回由每种内存对象类型分配的内存量。
SELECT SUM (pages_in_bytes) as 'Bytes Used', type
FROM sys.dm_os_memory_objects
GROUP BY type
ORDER BY 'Bytes Used' DESC;
GO
另请参阅
与 SQL Server 操作系统相关的动态管理视图 (Transact-SQL)
sys.dm_os_memory_clerks (Transact-SQL)