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。
|
|
pages_in_bytes |
bigint |
此内存对象实例分配的内存量(以字节为单位)。 不可为 Null。
|
|
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。
|
|
page_size_in_bytes |
int |
由该对象分配的页的大小(以字节为单位)。 不可为 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。 |
权限
要求对服务器拥有 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