sys.dm_os_memory_objects (Transact-SQL)

返回当前由 SQL Server 分配的内存对象。您可以使用 sys.dm_os_memory_objects 来分析内存使用情况并标识可能出现的内存泄漏。

适用范围:SQL Server(SQL Server 2008 到当前版本)。

列名

数据类型

说明

memory_object_address

varbinary(8)

内存对象的地址。 不可为 Null。

parent_address

varbinary(8)

父内存对象的地址。 可为 Null 值。

pages_allocated_count

int

由该对象分配的页数。 不可为 Null。

适用于:SQL Server 2008 到 SQL Server 2008 R2。

pages_in_bytes

bigint

此内存对象实例分配的内存量(以字节为单位)。 不可为 Null。

适用于:SQL Server 2012 到 SQL Server 2014。

creation_options

int

仅供内部使用。 可以为 Null。

bytes_used

bigint

仅供内部使用。 可以为 Null。

类型

nvarchar(60)

内存对象的类型。

它指示该内存对象所属的特定组件,或指示内存对象的函数。 可以为 Null。

name

varchar(128)

仅供内部使用。 可以为 NULL。

memory_node_id

smallint

该内存对象所用的内存节点的 ID。 不可为 Null。

creation_time

datetime

仅供内部使用。 可以为 Null。

max_pages_allocated_count

int

由该内存对象分配的最大页数。 不可为 Null。

适用于:SQL Server 2008 到 SQL Server 2008 R2。

page_size_in_bytes

int

由该对象分配的页的大小(以字节为单位)。 不可为 Null。

适用于:SQL Server 2012 到 SQL Server 2014。

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。

权限

要求对服务器拥有 VIEW SERVER STATE 权限。

注释

内存对象是指多个堆。 它们所提供的分配的粒度比内存分配器所提供的分配的粒度更精细。 SQL Server 组件使用内存对象,而不使用内存分配器。 内存对象使用内存分配器的页分配器接口来分配页。 内存对象不使用虚拟内存接口或共享内存接口。 根据分配模式的不同,组件可以创建不同的内存对象类型来分配任意大小的区域。

典型的内存对象页大小为 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

请参阅

参考

动态管理视图和函数 (Transact-SQL)

与 SQL Server 操作系统相关的动态管理视图 (Transact-SQL)

sys.dm_os_memory_clerks (Transact-SQL)