sys.dm_os_memory_clerks (Transact-SQL)

Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

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

Note

To call this from Azure Synapse Analytics or Analytics Platform System (PDW), use the name sys.dm_pdw_nodes_os_memory_clerks. This syntax is not supported by serverless SQL pool in Azure Synapse Analytics.

Column name Data type Description
memory_clerk_address varbinary(8) Specifies the unique memory address of the memory clerk. This is the primary key column. Is not nullable.
type nvarchar(60) Specifies the type of memory clerk. Every clerk has a specific type, such as CLR Clerks MEMORYCLERK_SQLCLR. Is not nullable.
name nvarchar(256) Specifies the internally assigned name of this memory clerk. A 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 Specifies the ID of the memory node. Not nullable.
single_pages_kb bigint Applies to: SQL Server 2008 (10.0.x) through SQL Server 2008 R2 (10.50.x). For more information, see Changes to Memory Management starting with SQL Server 2012 (11.x).
pages_kb bigint Applies to: SQL Server 2012 (11.x) and later.

Specifies the amount of page memory allocated in kilobytes (KB) for this memory clerk. Is not nullable.
multi_pages_kb bigint Applies to: SQL Server 2008 (10.0.x) through SQL Server 2008 R2 (10.50.x). For more information, see Changes to Memory Management starting with SQL Server 2012 (11.x).

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 Specifies the amount of virtual memory that is reserved by a memory clerk. Is not nullable.
virtual_memory_committed_kb bigint Specifies the amount of virtual memory that is committed by a memory clerk. The amount of committed memory should always be less than the amount of reserved memory. Is not nullable.
awe_allocated_kb bigint Specifies the amount of memory in kilobytes (KB) locked in the physical memory and not paged out by the operating system. Is not nullable.
shared_memory_reserved_kb bigint Specifies the 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 Specifies the amount of shared memory that is committed by the memory clerk. Is not nullable.
page_size_in_bytes bigint Specifies the granularity of the page allocation for this memory clerk. Is not nullable.
page_allocator_address varbinary(8) Specifies the 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) Specifies the 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.
pdw_node_id int Applies to: Azure Synapse Analytics, Analytics Platform System (PDW)

The identifier for the node that this distribution is on.

Permissions

On SQL Server, requires VIEW SERVER STATE permission.
On Azure SQL Database Basic, S0, and S1 service objectives, and for databases in elastic pools, the server admin account or the Microsoft Entra admin account is required. On all other Azure SQL Database service objectives, the VIEW DATABASE STATE permission is required in the database.

Permissions for SQL Server 2022 and later

Requires VIEW SERVER PERFORMANCE 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 middle level consists of memory clerks, memory caches, and memory pools. The top layer consists of memory objects. These objects are 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. Frequently, components create their corresponding clerks at the time SQL Server is started.

CACHESTORE and USERSTORE

CACHESTORE and USERSTORE are memory clerks but function as actual caches. Typically, caches keep allocations until a cache removal policy releases those allocations. To avoid re-creating it, a cached allocation is retained in cache as long as possible and is ordinarily removed from the cache when it is too old to be useful, or when the memory space is needed for new information (for more information, see clock hand sweep). This is one of the two major controls for caches - lifetime control and visibility control.

Cache store and user store differ in the way they control lifetime of allocations. In the case of a cache store, the lifetime of entries is fully controlled by SQLOS's caching framework. With user store, entries lifetime is only partially controlled by a store. The implementation of each user store may be specific to the nature of memory allocations and therefore user stores participate in lifetime control of its entries.

Visibility control manages visibility of an entry. An entry in a cache can exist but might not be visible. For example, if a cache entry is marked for single use only, the entry will not be visible after it is used. In addition, the cache entry might be marked as dirty; it will continue to live in the cache but won't be visible to any lookups. For both stores, entry visibility is controlled by the caching framework.

For more information, see SQLOS Caching.

OBJECTSTORE

Object store is a simple pool. It is used to cache homogeneous data. All entries in the pools are considered equal. Object stores implement a maximum cap to control size relative to other caches.

For more information, see SQLOS Caching.

Types

The following table lists the memory clerk types:

Type Description
CACHESTORE_BROKERDSH This cache store is used to store allocations by Service Broker Dialog Security Header Cache
CACHESTORE_BROKERKEK This cache store is used to store allocations by Service Broker Key Exchange Key Cache
CACHESTORE_BROKERREADONLY This cache store is used to store allocations by Service Broker Read Only Cache
CACHESTORE_BROKERRSB This cache store is used to store allocations by Service Broker Remote Service Binding Cache.
CACHESTORE_BROKERTBLACS This cache store is used to store allocations by Service Broker for security access structures.
CACHESTORE_BROKERTO This cache store is used to store allocations by Service Broker Transmission Object Cache
CACHESTORE_BROKERUSERCERTLOOKUP This cache store is used to store allocations by Service Broker user certificates lookup cache
CACHESTORE_COLUMNSTOREOBJECTPOOL This cache store is used for allocations by Columnstore Indexes for segments and dictionaries
CACHESTORE_CONVPRI This cache store is used to store allocations by Service Broker to keep track of Conversations priorities
CACHESTORE_EVENTS This cache store is used to store allocations by Service Broker Event Notifications
CACHESTORE_FULLTEXTSTOPLIST This memory clerk is used for allocations by Full-Text engine for stoplist functionality.
CACHESTORE_NOTIF This cache store is used for allocations by Query Notification functionality
CACHESTORE_OBJCP This cache store is used for caching objects with compiled plans (CP): stored procedures, functions, triggers. To illustrate, after a query plan for a stored procedure is created, its plan is stored in this cache.
CACHESTORE_PHDR This cache store is used for temporary memory caching during parsing for views, constraints, and defaults algebrizer trees during compilation of a query. Once query is parsed, the memory should be released. Some examples include: many statements in one batch - thousands of inserts or updates into one batch, a T-SQL batch that contains a large dynamically generated query, a large number of values in an IN clause.
CACHESTORE_QDSRUNTIMESTATS This cache store is used to cache Query Store runtime statistics
CACHESTORE_SEARCHPROPERTYLIST This cache store is used for allocations by Full-Text engine for Property List Cache
CACHESTORE_SEHOBTCOLUMNATTRIBUTE This cache store is used by storage engine for caching Heap or B-Tree (HoBT) column metadata structures.
CACHESTORE_SQLCP This cache store is used for caching ad hoc queries, prepared statements, and server-side cursors in plan cache. Ad hoc queries are commonly language-event T-SQL statements submitted to the server without explicit parameterization. Prepared statements also use this cache store - they are submitted by the application using API calls like SQLPrepare()/ SQLExecute (ODBC) or SqlCommand.Prepare/SqlCommand.ExecuteNonQuery (ADO.NET) and will appear on the server as sp_prepare/sp_execute or sp_prepexec system procedure executions. Also, server-side cursors would consume from this cache store (sp_cursoropen, sp_cursorfetch, sp_cursorclose).
CACHESTORE_STACKFRAMES This cache store is used for allocations of internal SQL OS structures related to stack frames.
CACHESTORE_SYSTEMROWSET This cache store is used for allocations of internal structures related to transaction logging and recovery.
CACHESTORE_TEMPTABLES This cache store is used for allocations related to temporary tables and table variables caching - part of plan cache.
CACHESTORE_VIEWDEFINITIONS This cache store is used for caching view definitions as part of query optimization.
CACHESTORE_XML_SELECTIVE_DG This cache store is used to cache XML structures for XML processing.
CACHESTORE_XMLDBATTRIBUTE This cache store is used to cache XML attribute structures for XML activity like XQuery.
CACHESTORE_XMLDBELEMENT This cache store is used to cache XML element structures for XML activity like XQuery.
CACHESTORE_XMLDBTYPE This cache store is used to cache XML structures for XML activity like XQuery.
CACHESTORE_XPROC This cache store is used for caching structures for Extended Stored procedures (Xprocs) in plan cache.
MEMORYCLERK_BACKUP This memory clerk is used for various allocations by Backup functionality
MEMORYCLERK_BHF This memory clerk is used for allocations for binary large objects (BLOB) management during query execution (Blob Handle support)
MEMORYCLERK_BITMAP This memory clerk is used for allocations by SQL OS functionality for bitmap filtering
MEMORYCLERK_CSILOBCOMPRESSION This memory clerk is used for allocations by Columnstore Index binary large objects (BLOB) Compression
MEMORYCLERK_DRTLHEAP This memory clerk is used for allocations by SQL OS functionality

Applies to: SQL Server 2019 (15.x) and later
MEMORYCLERK_EXPOOL This memory clerk is used for allocations by SQL OS functionality

Applies to: SQL Server 2019 (15.x) and later
MEMORYCLERK_EXTERNAL_EXTRACTORS This memory clerk is used for allocations by query execution engine for batch mode operations

Applies to: SQL Server 2019 (15.x) and later
MEMORYCLERK_FILETABLE This memory clerk is used for various allocations by FileTables functionality.
MEMORYCLERK_FSAGENT This memory clerk is used for various allocations by FILESTREAM functionality.
MEMORYCLERK_FSCHUNKER This memory clerk is used for various allocations by FILESTREAM functionality for creating filestream chunks.
MEMORYCLERK_FULLTEXT This memory clerk is used for allocations by Full-Text engine structures.
MEMORYCLERK_FULLTEXT_SHMEM This memory clerk is used for allocations by Full-Text engine structures related to Shared memory connectivity with the Full Text Daemon process.
MEMORYCLERK_HADR This memory clerk is used for memory allocations by Always On functionality
MEMORYCLERK_HOST This memory clerk is used for allocations by SQL OS functionality.
MEMORYCLERK_LANGSVC This memory clerk is used for allocations by SQL T-SQL statements and commands (parser, algebrizer, etc.)
MEMORYCLERK_LWC This memory clerk is used for allocations by Full-Text Semantic Search engine
MEMORYCLERK_POLYBASE This memory clerk keeps track of memory allocations for PolyBase functionality inside SQL Server.
MEMORYCLERK_QSRANGEPREFETCH This memory clerk is used for allocations during query execution for query scan range prefetch.
MEMORYCLERK_QUERYDISKSTORE This memory clerk is used by Query Store memory allocations inside SQL Server.
MEMORYCLERK_QUERYDISKSTORE_HASHMAP This memory clerk is used by Query Store memory allocations inside SQL Server.
MEMORYCLERK_QUERYDISKSTORE_STATS This memory clerk is used by Query Store memory allocations inside SQL Server.
MEMORYCLERK_QUERYPROFILE This memory clerk is used for during server startup to enable query profiling

Applies to: SQL Server 2019 (15.x) and later
MEMORYCLERK_RTLHEAP This memory clerk is used for allocations by SQL OS functionality.

Applies to: SQL Server 2019 (15.x) and later
MEMORYCLERK_SECURITYAPI This memory clerk is used for allocations by SQL OS functionality.

Applies to: SQL Server 2019 (15.x) and later
MEMORYCLERK_SERIALIZATION Internal use only
MEMORYCLERK_SLOG This memory clerk is used for allocations by sLog (secondary in-memory log stream) in Accelerated Database Recovery

Applies to: SQL Server 2019 (15.x) and later
MEMORYCLERK_SNI This memory clerk allocates memory for the Server Network Interface (SNI) components. SNI manages connectivity and TDS packets for SQL Server
MEMORYCLERK_SOSMEMMANAGER This memory clerk allocates structures for SQLOS (SOS) thread scheduling and memory and I/O management..
MEMORYCLERK_SOSNODE This memory clerk allocates structures for SQLOS (SOS) thread scheduling and memory and I/O management.
MEMORYCLERK_SOSOS This memory clerk allocates structures for SQLOS (SOS) thread scheduling and memory and I/O management..
MEMORYCLERK_SPATIAL This memory clerk is used by Spatial Data components for memory allocations.
MEMORYCLERK_SQLBUFFERPOOL This memory clerk keeps track of commonly the largest memory consumer inside SQL Server - data and index pages. Buffer Pool or data cache keeps data and index pages loaded in memory to provide fast access to data. For more information, see Buffer Management.
MEMORYCLERK_SQLCLR This memory clerk is used for allocations by SQLCLR.
MEMORYCLERK_SQLCLRASSEMBLY This memory clerk is used for allocations for SQLCLR assemblies.
MEMORYCLERK_SQLCONNECTIONPOOL This memory clerk caches information on the server that the client application may need the server to keep track of. One example is an application that creates prepare handles via sp_prepexecrpc. The application should properly unprepare (close) those handles after execution.
MEMORYCLERK_SQLEXTENSIBILITY This memory clerk is used for allocations by the Extensibility Framework for running external Python or R scripts on SQL Server.

Applies to: SQL Server 2019 (15.x) and later
MEMORYCLERK_SQLGENERAL This memory clerk could be used by multiple consumers inside SQL engine. Examples include replication memory, internal debugging/diagnostics, some SQL Server startup functionality, some SQL parser functionality, building system indexes, initialize global memory objects, Create OLEDB connection inside the server and Linked Server queries, Server-side Profiler tracing, creating showplan data, some security functionality, compilation of computed columns, memory for Parallelism structures, memory for some XML functionality
MEMORYCLERK_SQLHTTP Deprecated
MEMORYCLERK_SQLLOGPOOL This memory clerk is used by SQL Server Log Pool. Log Pool is a cache used to improve performance when reading the transaction log. Specifically it improves log cache utilization during multiple log reads, reduces disk I/O log reads and allows sharing of log scans. Primary consumers of log pool are Always On (Change Capture and Send), Redo Manager, Database Recovery - Analysis/Redo/Undo, Transaction Runtime Rollback, Replication/CDC, Backup/Restore.
MEMORYCLERK_SQLOPTIMIZER This memory clerk is used for memory allocations during different phases of compiling a query. Some uses include query optimization, index statistics manager, view definitions compilation, histogram generation.
MEMORYCLERK_SQLQERESERVATIONS This memory clerk is used for Memory Grant allocations, that is memory allocated to queries to perform sort and hash operations during query execution. For more information on Query Execution reservations (memory grants), see this blog
MEMORYCLERK_SQLQUERYCOMPILE This memory clerk is used by Query optimizer for allocating memory during query compiling.
MEMORYCLERK_SQLQUERYEXEC This memory clerk is used for allocations in the following areas: Batch mode processing, Parallel query execution, query execution context, spatial index tessellation, sort and hash operations (sort tables, hash tables), some DVM processing, update statistics execution
MEMORYCLERK_SQLQUERYPLAN This memory clerk is used for allocations by Heap page management, DBCC CHECKTABLE allocations, and sp_cursor* stored procedure allocations
MEMORYCLERK_SQLSERVICEBROKER This memory clerk is used by SQL Server Service Broker memory allocations.
MEMORYCLERK_SQLSERVICEBROKERTRANSPORT This memory clerk is used by SQL Server Service Broker transport memory allocations.
MEMORYCLERK_SQLSLO_OPERATIONS This memory clerk is used to gather performance statistics

Applies to: Azure SQL Database
MEMORYCLERK_SQLSOAP Deprecated
MEMORYCLERK_SQLSOAPSESSIONSTORE Deprecated
MEMORYCLERK_SQLSTORENG This memory clerk is used for allocations by multiple storage engine components. Examples of components include structures for database files, database snapshot replica file manager, deadlock monitor, DBTABLE structures, Log manager structures, some tempdb versioning structures, some server startup functionality, execution context for child threads in parallel queries.
MEMORYCLERK_SQLTRACE This memory clerk is used for server-side SQL Trace memory allocations.
MEMORYCLERK_SQLUTILITIES This memory clerk can be used by multiple allocators inside SQL Server. Examples include Backup and Restore, Log Shipping, Database Mirroring, DBCC commands, BCP code on the server side, some query parallelism work, Log Scan buffers.
MEMORYCLERK_SQLXML This memory clerk is used for memory allocations when performing XML operations.
MEMORYCLERK_SQLXP This memory clerk is used for memory allocations when calling SQL Server Extended Stored procedures.
MEMORYCLERK_SVL This memory clerk is used used for allocations of internal SQL OS structures
MEMORYCLERK_TEST Internal use only
MEMORYCLERK_UNITTEST Internal use only
MEMORYCLERK_WRITEPAGERECORDER This memory clerk is used for allocations by Write Page Recorder.
MEMORYCLERK_XE This memory clerk is used for Extended Events memory allocations
MEMORYCLERK_XE_BUFFER This memory clerk is used for Extended Events memory allocations
MEMORYCLERK_XLOG_SERVER This memory clerk is used for allocations by Xlog used for log file management in SQL Azure Database

Applies to: Azure SQL Database
MEMORYCLERK_XTP This memory clerk is used for In-Memory OLTP memory allocations.
OBJECTSTORE_LBSS This object store is used to allocate temporary LOBs - variables, parameters, and intermediate results for expressions. An example that uses this store is table-valued parameters (TVP) . See the KB article 4468102 and KB article 4051359 for more information on fixes in this space.
OBJECTSTORE_LOCK_MANAGER This memory clerk keeps track of allocations made by the Lock Manager in SQL Server.
OBJECTSTORE_SECAUDIT_EVENT_BUFFER This object store is used for SQL Server Audit memory allocations.
OBJECTSTORE_SERVICE_BROKER This object store is used by Service Broker
OBJECTSTORE_SNI_PACKET This object store is used by Server Network Interface (SNI) components which manage connectivity
OBJECTSTORE_XACT_CACHE This object store is used to cache transactions information
USERSTORE_DBMETADATA This object store is used for metadata structures
USERSTORE_OBJPERM This store is used for structures keeping track of object security/permission
USERSTORE_QDSSTMT This cache store is used to cache Query Store statements
USERSTORE_SCHEMAMGR Schema manager cache stores different types of metadata information about the database objects in memory (e.g tables). A common user of this store could be the tempdb database with objects like tables, temp procedures, table variables, table-valued parameters, worktables, workfiles, version store.
USERSTORE_SXC This user store is used for allocations to store all RPC parameters.
USERSTORE_TOKENPERM TokenAndPermUserStore is a single SOS user store that keeps track of security entries for security context, login, user, permission, and audit. Multiple hash tables are allocated to store these objects.

Note

Documentation uses the term B-tree generally in reference to indexes. In rowstore indexes, the Database Engine implements a B+ tree. This does not apply to columnstore indexes or indexes on memory-optimized tables. For more information, see the SQL Server and Azure SQL index architecture and design guide.

See Also

SQL Server Operating System Related Dynamic Management Views (Transact-SQL)
sys.dm_os_sys_info (Transact-SQL)
sys.dm_exec_query_memory_grants (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_query_plan (Transact-SQL)
sys.dm_exec_sql_text (Transact-SQL)