sys.dm_os_memory_clerks (Transact-SQL)

Returns the set of all memory clerks that are currently active in the instance of SQL Server. 

Column name

Data type

Description

memory_clerk_address

varbinary(8)

Unique memory address of the memory clerk. This is the primary key column. Is not nullable.

type

nvarchar(60)

Type of memory clerk. Every clerk has a specific type, such as CLR Clerks MEMORYCLERK_SQLCLR. Is not nullable.

name

nvarchar(256)

Internally assigned name of this memory clerk. Every component can have several memory clerks of a specific type. A component might choose to use specific names to identify memory clerks of the same type. Is not nullable.

memory_node_id

smallint

ID of the memory node. Is not nullable.

single_pages_kb

bigint

Amount of single page memory allocated in kilobytes (KB). This is the amount of memory allocated by using the single page allocator of a memory node. This single page allocator steals pages directly from the buffer pool. Is not nullable.

multi_pages_kb

bigint

Amount of multipage memory allocated in KB. This is the amount of memory allocated by using the multiple page allocator of the memory nodes. This memory is allocated outside the buffer pool and takes advantage of the virtual allocator of the memory nodes. Is not nullable.

virtual_memory_reserved_kb

bigint

Amount of virtual memory that is reserved by a memory clerk. This is the amount of memory reserved directly by the component that uses this clerk. In most situations, only the buffer pool reserves virtual address space directly by using its memory clerk. Is not nullable.

virtual_memory_committed_kb

bigint

Amount of virtual memory that is committed by a memory clerk. This is the amount of memory committed by the clerk. The amount of committed memory should always be less than the amount of reserved memory. Not NULLABLE.

awe_allocated_kb

bigint

Amount of memory that is allocated by the memory clerk by using Address Windowing Extensions (AWE). In SQL Server, only buffer pool clerks (MEMORYCLERK_SQLBUFFERPOOL) use this mechanism, and only when AWE is enabled. Is not nullable.

shared_memory_reserved_kb

bigint

Amount of shared memory that is reserved by a memory clerk. The amount of memory reserved for use by shared memory and file mapping. Is not nullable.

shared_memory_committed_kb

bigint

Amount of shared memory that is committed by the memory clerk. Is not nullable.

page_size_bytes

bigint

Size of the page that can be allocated by a memory clerk. Only one size, 8192 bytes, is supported. Is not nullable.

page_allocator_address

varbinary(8)

Address of the page allocator. This address is unique for a memory clerk and can be used in sys.dm_os_memory_objects to locate memory objects that are bound to this clerk. Is not nullable.

host_address

varbinary(8)

Memory address of the host for this memory clerk. For more information, see sys.dm_os_hosts (Transact-SQL). Components, such as Microsoft SQL Server Native Client, access SQL Server memory resources through the host interface.

0x00000000 = Memory clerk belongs to SQL Server.

Is not nullable.

Permissions

Requires VIEW SERVER STATE permission on the server.

Remarks

The SQL Server memory manager consists of a three-layer hierarchy. At the bottom of the hierarchy are memory nodes. The next level consists of memory clerks, memory caches, and memory pools. The last layer consists of memory objects. These objects are generally used to allocate memory in an instance of SQL Server.

Memory nodes provide the interface and the implementation for low-level allocators. Inside SQL Server, only memory clerks have access to memory nodes. Memory clerks access memory node interfaces to allocate memory. Memory nodes also track the memory allocated by using the clerk for diagnostics. Every component that allocates a significant amount of memory must create its own memory clerk and allocate all its memory by using the clerk interfaces. Components create their corresponding clerks at the time SQL Server is started.