分享方式:


sys.dm_os_memory_clerks (Transact-SQL)

適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)

傳回 SQL Server 實例中目前作用中之所有記憶體 Clerk 的集合。

注意

若要從 Azure Synapse Analytics 或 Analytics Platform System (PDW) 呼叫此專案,請使用名稱 sys.dm_pdw_nodes_os_memory_clerks。 Azure Synapse Analytics 的無伺服器 SQL 集區不支援此語法。

資料行名稱 資料類型 描述
memory_clerk_address varbinary(8) 指定記憶體 Clerk 的唯一記憶體位址。 這是主鍵數據行。 不可為 Null。
type nvarchar(60) 指定記憶體 Clerk 的類型。 每個職員都有特定類型,例如CLR Clerks MEMORYCLERK_SQLCLR。 不可為 Null。
name nvarchar(256) 指定這個記憶體 Clerk 的內部指派名稱。 元件可以有數個特定類型的記憶體 Clerk。 元件可能會選擇使用特定名稱來識別相同類型的記憶體 Clerk。 不可為 Null。
memory_node_id smallint 指定記憶體節點的識別碼。 不可為 Null。
single_pages_kb bigint 適用於:SQL Server 2008 (10.0.x) 到 SQL Server 2008 R2 (10.50.x)。 如需詳細資訊,請參閱 從 SQL Server 2012 (11.x) 開始的記憶體管理變更。
pages_kb bigint 適用於:SQL Server 2012 (11.x) 和更新版本。

指定為此記憶體 Clerk 配置以 KB 為單位的頁面記憶體數量。 不可為 Null。
multi_pages_kb bigint 適用於:SQL Server 2008 (10.0.x) 到 SQL Server 2008 R2 (10.50.x)。 如需詳細資訊,請參閱 從 SQL Server 2012 (11.x) 開始的記憶體管理變更。

以 KB 配置的多頁記憶體數量。 這是使用記憶體節點的多個分頁配置器所配置的記憶體數量。 此記憶體配置於緩衝池外部,並利用記憶體節點的虛擬配置器。 不可為 Null。
virtual_memory_reserved_kb bigint 指定記憶體 Clerk 所保留的虛擬記憶體數量。 不可為 Null。
virtual_memory_committed_kb bigint 指定記憶體 Clerk 所認可的虛擬記憶體數量。 認可記憶體的數量應該一律小於保留的記憶體數量。 不可為 Null。
awe_allocated_kb bigint 指定鎖定在物理記憶體中且未由操作系統分頁的以 KB 為單位的記憶體數量。 不可為 Null。
shared_memory_reserved_kb bigint 指定記憶體 Clerk 所保留的共用記憶體數量。 保留供共用記憶體和檔案對應使用的記憶體數量。 不可為 Null。
shared_memory_committed_kb bigint 指定記憶體 Clerk 所認可的共用記憶體數量。 不可為 Null。
page_size_in_bytes bigint 指定此記憶體 Clerk 的頁面配置粒度。 不可為 Null。
page_allocator_address varbinary(8) 指定頁面配置器的位址。 此位址對於記憶體 Clerk 而言是唯一的,可用於sys.dm_os_memory_objects尋找系結至此 clerk 的記憶體物件。 不可為 Null。
host_address varbinary(8) 指定此記憶體 Clerk 主機的記憶體位址。 如需詳細資訊,請參閱 sys.dm_os_hosts (Transact-SQL) 。 Microsoft SQL Server Native Client 等元件會透過主機介面存取 SQL Server 記憶體資源。

0x00000000 = 記憶體 clerk 屬於 SQL Server。

不可為 Null。
pdw_node_id int 適用於:Azure Synapse Analytics、Analytics Platform System (PDW)

此散發節點的標識碼。

權限

在 SQL Server 上,需要 VIEW SERVER STATE 許可權。
在 Azure SQL 資料庫 Basic、S0 和 S1 服務目標上,以及彈性集區中的資料庫,需要伺服器管理員帳戶或 Microsoft Entra 系統管理員帳戶。 在所有其他 Azure SQL 資料庫 服務目標上,VIEW DATABASE STATE資料庫需要許可權。

SQL Server 2022 和更新版本的權限

需要伺服器上的 VIEW SERVER PERFORMANCE STATE 權限。

備註

SQL Server 記憶體管理員是由三層階層所組成。 階層底部是記憶體節點。 中介層級包含記憶體 Clerk、記憶體快取和記憶體集區。 最上層是由記憶體物件所組成。 這些對像是用來在 SQL Server 實例中配置記憶體。

記憶體節點提供低階配置器的介面和實作。 在 SQL Server 內,只有記憶體 Clerk 可以存取記憶體節點。 記憶體 Clerk 會存取記憶體節點介面來配置記憶體。 記憶體節點也會使用 Clerk 進行診斷來追蹤配置的記憶體。 配置大量記憶體的每個元件都必須建立自己的記憶體 Clerk,並使用 clerk 介面配置其所有記憶體。 元件通常會在啟動 SQL Server 時建立其對應的 Clerk。

CACHESTORE 和 USERSTORE

CACHESTORE 和 USERSTORE 是記憶體 Clerk,但可作為實際快取。 一般而言,快取會保留配置,直到快取移除原則釋放這些配置為止。 為了避免重新建立它,快取的配置會盡可能保留在快取中,而且通常會在快取中將其從快取中移除,當它太舊而無法使用,或需要新資訊的記憶體空間時(如需詳細資訊,請參閱 時鐘手掃掠)。 這是快取的兩個主要控件之一 - 存留期控件和可見性控件。

快取存放區和使用者存放區在控制配置存留期的方式不同。 在快取存放區的情況下,專案的存留期完全由 SQLOS 的快取架構控制。 使用使用者存放區時,專案存留期只會由存放區部分控制。 每個使用者存放區的實作可能專屬於記憶體配置的性質,因此使用者存放區會參與其專案的存留期控制。

可見度控件會管理項目的可見性。 快取中的專案可以存在,但可能看不到。 例如,如果快取項目標示為僅供單一使用,則使用快取項目之後將不會顯示該專案。 此外,快取專案可能標示為已變更;它會繼續存在於快取中,但不會顯示任何查閱。 對於這兩個存放區,項目可見度是由快取架構所控制。

如需詳細資訊,請參閱 SQLOS 快取

OBJECTSTORE

物件存放區是簡單的集區。 它用來快取同質數據。 集區中的所有項目都會視為相等。 物件存放區會實作上限,以控制相對於其他快取的大小。

如需詳細資訊,請參閱 SQLOS 快取

類型

下表列出記憶體 Clerk 型態:

類型 描述
CACHESTORE_BROKERDSH 此快取存放區可用來儲存 Service Broker 對話框安全性標頭快取的配置
CACHESTORE_BROKERKEK 此快取存放區可用來儲存 Service Broker 金鑰交換密鑰快取的配置
CACHESTORE_BROKERREADONLY 此快取存放區可用來儲存 Service Broker 只讀快取的配置
CACHESTORE_BROKERRSB 此快取存放區可用來儲存 Service Broker 遠端服務系結快取的配置。
CACHESTORE_BROKERTBLACS 此快取存放區可用來儲存 Service Broker 針對安全性存取結構的配置。
CACHESTORE_BROKERTO 此快取存放區可用來儲存 Service Broker 傳輸物件快取的配置
CACHESTORE_BROKERUSERCERTLOOKUP 此快取存放區可用來儲存 Service Broker 使用者憑證查閱快取的配置
CACHESTORE_COLUMNSTOREOBJECTPOOL 此快取存放區用於區段和字典的數據行存放區索引配置
CACHESTORE_CONVPRI 此快取存放區可用來儲存 Service Broker 的配置,以追蹤交談優先順序
CACHESTORE_EVENTS 此快取存放區可用來儲存 Service Broker 事件通知的配置
CACHESTORE_FULLTEXTSTOPLIST 此記憶體 Clerk 用於全文檢索引擎設定 停用字詞表 功能。
CACHESTORE_NOTIF 此快取存放區用於查詢通知功能的配置
CACHESTORE_OBJCP 此快取存放區用於快取具有編譯計劃的物件(CP):預存程式、函式、觸發程式。 為了說明,建立預存程式的查詢計劃之後,其計劃會儲存在此快取中。
CACHESTORE_PHDR 此快取存放區用於在查詢編譯期間剖析檢視、條件約束和預設 algebrizer 樹狀結構期間的暫存記憶體快取。 剖析查詢之後,應該釋放記憶體。 一些範例包括:一個批次中的許多語句-成千上萬的插入或更新到一個批次,一個 T-SQL 批次,其中包含大量動態產生的查詢,一個 IN 子句中的大量值。
CACHESTORE_QDSRUNTIMESTATS 此快取存放區可用來快取運行時間統計數據 查詢存放區
CACHESTORE_SEARCHPROPERTYLIST 此快取存放區用於屬性清單快取的全文檢索引擎配置
CACHESTORE_SEHOBTCOLUMNATTRIBUTE 儲存引擎會使用此快取存放區來快取堆積或 B 型樹狀結構(HoBT) 數據行元數據結構。
CACHESTORE_SQLCP 此快取存放區用於快取計劃快取中的臨機操作查詢、備妥語句和伺服器端數據指標。 臨機操作查詢通常是向伺服器提交的語言事件 T-SQL 語句,而不需明確參數化。 備妥的語句也會使用此快取存放區 - 應用程式會使用 SQLPrepare()SQLExecute (ODBC)/ SqlCommand.Prepare/SqlCommand.ExecuteNonQuery ADO.NET 等 API 呼叫來提交它們,而且會在伺服器上顯示為sp_prepare/sp_executesp_prepexec系統程序執行。 此外,伺服器端數據指標會從這個快取存放區取用 (sp_cursoropensp_cursorfetchsp_cursorclose)。
CACHESTORE_STACKFRAMES 此快取存放區用於配置與堆疊框架相關的內部 SQL OS 結構。
CACHESTORE_SYSTEMROWSET 此快取存放區用於配置與事務歷史記錄和復原相關的內部結構。
CACHESTORE_TEMPTABLES 此快取存放區用於與臨時表和數據表變數快取相關的配置 - 計劃快取的一部分。
CACHESTORE_VIEWDEFINITIONS 此快取存放區用於快取檢視定義作為查詢優化一部分。
CACHESTORE_XML_SELECTIVE_DG 此快取存放區可用來快取 XML 結構以進行 XML 處理。
CACHESTORE_XMLDBATTRIBUTE 此快取存放區是用來快取 XML 活動之 XML 屬性結構,例如 XQuery
CACHESTORE_XMLDBELEMENT 此快取存放區可用來快取 XML 活動的 XML 項目結構,例如 XQuery
CACHESTORE_XMLDBTYPE 此快取存放區可用來快取 XML 活動的 XML 結構,例如 XQuery。
CACHESTORE_XPROC 此快取存放區用於計劃快取中擴充 預存程式 (Xprocs) 的快取結構。
MEMORYCLERK_BACKUP 此記憶體 Clerk 會依備份功能用於各種配置
MEMORYCLERK_BHF 此記憶體 Clerk 用於查詢執行期間用於二進位大型物件 (BLOB) 管理的設定 (Blob 句柄支援)
MEMORYCLERK_BITMAP 此記憶體 Clerk 用於由 SQL OS 功能進行點陣圖篩選的配置
MEMORYCLERK_CSILOBCOMPRESSION 此記憶體 Clerk 用於資料 行存放區索引二進位大型物件 (BLOB) 壓縮的配置
MEMORYCLERK_DRTLHEAP 此記憶體 Clerk 用於 SQL OS 功能的配置

適用於:SQL Server 2019 (15.x) 和更新版本
MEMORYCLERK_EXPOOL 此記憶體 Clerk 用於 SQL OS 功能的配置

適用於:SQL Server 2019 (15.x) 和更新版本
MEMORYCLERK_EXTERNAL_EXTRACTORS 此記憶體 Clerk 用於批次模式作業的查詢執行引擎配置

適用於:SQL Server 2019 (15.x) 和更新版本
MEMORYCLERK_FILETABLE 此記憶體 Clerk 用於 FileTables 功能的各種配置
MEMORYCLERK_FSAGENT 此記憶體 Clerk 會用於 FILESTREAM 功能的各種配置
MEMORYCLERK_FSCHUNKER 此記憶體 Clerk 用於 FILESTREAM 功能的各種配置,以建立 filestream 區塊。
MEMORYCLERK_FULLTEXT 此記憶體 Clerk 用於全文檢索引擎結構的配置。
MEMORYCLERK_FULLTEXT_SHMEM 此記憶體 Clerk 用於與全文檢索精靈程式共用記憶體連線相關的全文檢索引擎結構配置。
MEMORYCLERK_HADR 此記憶體 Clerk 用於 Always On 功能的記憶體配置
MEMORYCLERK_HOST 此記憶體 Clerk 用於 SQL OS 功能的配置。
MEMORYCLERK_LANGSVC 此記憶體 Clerk 用於 SQL T-SQL 語句和命令的設定(剖析器、algebrizer 等)
MEMORYCLERK_LWC 此記憶體 Clerk 用於全文檢索 語意搜尋引擎 的配置
MEMORYCLERK_POLYBASE 此記憶體 Clerk 會追蹤 SQL Server 內 PolyBase 功能的記憶體配置
MEMORYCLERK_QSRANGEPREFETCH 此記憶體 Clerk 用於查詢執行期間針對預先擷取查詢掃描範圍的配置。
MEMORYCLERK_QUERYDISKSTORE SQL Server 內的 查詢存放區 記憶體配置會使用此記憶體 clerk。
MEMORYCLERK_QUERYDISKSTORE_HASHMAP SQL Server 內的記憶體配置 查詢存放區 會使用此記憶體 clerk。
MEMORYCLERK_QUERYDISKSTORE_STATS SQL Server 內的記憶體配置 查詢存放區 使用此記憶體 clerk。
MEMORYCLERK_QUERYPROFILE 此記憶體 clerk 用於伺服器啟動期間啟用查詢分析

適用於:SQL Server 2019 (15.x) 和更新版本
MEMORYCLERK_RTLHEAP 此記憶體 Clerk 用於 SQL OS 功能的配置。

適用於:SQL Server 2019 (15.x) 和更新版本
MEMORYCLERK_SECURITYAPI 此記憶體 Clerk 用於 SQL OS 功能的配置。

適用於:SQL Server 2019 (15.x) 和更新版本
MEMORYCLERK_SERIALIZATION 僅供內部使用。
MEMORYCLERK_SLOG 此記憶體 Clerk 用於加速資料庫復原中的 sLog (次要記憶體內部記錄資料流) 的配置

適用於:SQL Server 2019 (15.x) 和更新版本
MEMORYCLERK_SNI 此記憶體 Clerk 會設定伺服器網路介面 (SNI) 元件的記憶體。 SNI 會管理 SQL Server 的連線能力和 TDS 封包
MEMORYCLERK_SOSMEMMANAGER 此記憶體 Clerk 會配置 SQLOS (SOS) 線程排程和記憶體和 I/O 管理的結構。
MEMORYCLERK_SOSNODE 此記憶體 Clerk 會配置 SQLOS (SOS) 線程排程和記憶體和 I/O 管理的結構。
MEMORYCLERK_SOSOS 此記憶體 Clerk 會配置 SQLOS (SOS) 線程排程和記憶體和 I/O 管理的結構。
MEMORYCLERK_SPATIAL 空間數據元件會使用此記憶體 Clerk 進行記憶體配置。
MEMORYCLERK_SQLBUFFERPOOL 此記憶體 Clerk 會追蹤 SQL Server 記憶體最大的記憶體取用者 - 資料和索引頁面。 緩衝池或數據快取會保留記憶體中載入的數據和索引頁面,以提供數據的快速存取。 如需詳細資訊,請參閱 緩衝區管理
MEMORYCLERK_SQLCLR 此記憶體 Clerk 用於 SQLCLR 的配置
MEMORYCLERK_SQLCLRASSEMBLY 此記憶體 Clerk 用於 SQLCLR 元件的配置
MEMORYCLERK_SQLCONNECTIONPOOL 此記憶體 Clerk 會快取用戶端應用程式可能需要伺服器追蹤之伺服器上的資訊。 其中一個範例是透過 sp_prepexecrpc 建立準備句柄的應用程式。 應用程式應該在執行後適當地取消準備這些句柄。。
MEMORYCLERK_SQLEXTENSIBILITY 此記憶體 Clerk 用於 擴充性架構 的配置,以在 SQL Server 上執行外部 Python 或 R 腳本。

適用於:SQL Server 2019 (15.x) 和更新版本
MEMORYCLERK_SQLGENERAL SQL 引擎內的多個取用者可以使用此記憶體 Clerk。 範例包括複寫記憶體、內部偵錯/診斷、一些 SQL Server 啟動功能、一些 SQL 剖析器功能、建置系統索引、初始化全域記憶體物件、在伺服器內建立 OLEDB 連線和連結的伺服器查詢、伺服器端分析工具追蹤、建立 showplan 數據、某些安全性功能、計算數據行的編譯、平行處理原則結構的記憶體、某些 XML 功能的記憶體
MEMORYCLERK_SQLHTTP 已取代
MEMORYCLERK_SQLLOGPOOL SQL Server 記錄集區會使用此記憶體 Clerk。 記錄集區是在讀取事務歷史記錄時用來改善效能的快取。 具體而言,它可改善多個記錄讀取期間的記錄快取使用率、減少磁碟 I/O 記錄讀取,並允許共用記錄掃描。 記錄集區的主要取用者為 AlwaysOn(異動擷取和傳送)、Redo Manager、資料庫復原 - Analysis/Redo/Undo、Transaction Runtime Rollback、Replication/CDC、Backup/Restore。
MEMORYCLERK_SQLOPTIMIZER 此記憶體 Clerk 用於編譯查詢的不同階段中的記憶體配置。 有些用法包括查詢優化、索引統計數據管理員、檢視定義編譯、直方圖產生。
MEMORYCLERK_SQLQERESERVATIONS 此記憶體 Clerk 用於記憶體授與配置,這是配置給查詢的記憶體,以在查詢執行期間執行排序和哈希作業。 如需查詢執行保留區的詳細資訊(記憶體授與),請參閱 此部落格
MEMORYCLERK_SQLQUERYCOMPILE 查詢優化器會使用此記憶體 Clerk 在查詢編譯期間配置記憶體。
MEMORYCLERK_SQLQUERYEXEC 此記憶體 Clerk 用於下列區域中的配置:批次模式處理、平行查詢執行、查詢執行內容、空間索引鑲嵌、排序和哈希作業(排序表、哈希表)、某些 DVM 處理、更新統計數據執行
MEMORYCLERK_SQLQUERYPLAN 此記憶體 clerk 用於 堆積 頁面管理、 DBCC CHECKTABLE 配置,以及 sp_cursor* 預存程式 設定的配置
MEMORYCLERK_SQLSERVICEBROKER SQL Server Service Broker 記憶體配置會使用此記憶體 Clerk。
MEMORYCLERK_SQLSERVICEBROKERTRANSPORT SQL Server Service Broker 傳輸記憶體配置會使用此記憶體 Clerk。
MEMORYCLERK_SQLSLO_OPERATIONS 此記憶體 Clerk 用來收集效能統計數據

適用於:Azure SQL Database
MEMORYCLERK_SQLSOAP 已取代
MEMORYCLERK_SQLSOAPSESSIONSTORE 已取代
MEMORYCLERK_SQLSTORENG 此記憶體 Clerk 用於多個儲存引擎元件的配置。 元件的範例包括資料庫檔案、資料庫快照集復本檔管理員、死結監視器、DBTABLE 結構、記錄管理員結構、某些 tempdb 版本設定結構、某些伺服器啟動功能、平行查詢中子線程的執行內容。
MEMORYCLERK_SQLTRACE 此記憶體 Clerk 用於伺服器端 SQL 追蹤 記憶體配置。
MEMORYCLERK_SQLUTILITIES SQL Server 內的多個配置器可以使用此記憶體 Clerk。 範例包括備份和還原、記錄傳送、資料庫鏡像、DBCC 命令、伺服器端的 BCP 程式代碼、某些查詢平行處理原則運作、記錄掃描緩衝區。
MEMORYCLERK_SQLXML 執行 XML 作業時,此記憶體 Clerk 會用於記憶體配置。
MEMORYCLERK_SQLXP 呼叫 SQL Server 擴充預存程式時,此記憶體 Clerk 會用於記憶體配置。
MEMORYCLERK_SVL 此記憶體 Clerk 用於配置內部 SQL OS 結構
MEMORYCLERK_TEST 僅供內部使用。
MEMORYCLERK_UNITTEST 僅供內部使用。
MEMORYCLERK_WRITEPAGERECORDER 寫入頁面錄製器會使用此記憶體 Clerk 進行配置。
MEMORYCLERK_XE 此記憶體 Clerk 用於 擴充事件 記憶體配置
MEMORYCLERK_XE_BUFFER 此記憶體 Clerk 用於 擴充事件 記憶體配置
MEMORYCLERK_XLOG_SERVER 此記憶體 Clerk 用於 SQL Azure Database 中用於記錄檔管理的 Xlog 配置

適用於:Azure SQL Database
MEMORYCLERK_XTP 此記憶體 Clerk 用於 記憶體內部 OLTP 記憶體配置。
OBJECTSTORE_LBSS 此物件存放區可用來配置暫存LOB - 表達式的變數、參數和中繼結果。 使用此存放區的範例是 資料表值參數 (TVP) 。 如需此空間中修正的詳細資訊,請參閱知識庫文章4468102KB 文章4051359
OBJECTSTORE_LOCK_MANAGER 此記憶體 Clerk 會追蹤 SQL Server 中鎖定管理員所做的配置。
OBJECTSTORE_SECAUDIT_EVENT_BUFFER 此物件存放區用於 SQL Server Audit 記憶體配置。
OBJECTSTORE_SERVICE_BROKER Service Broker 會 使用此物件存放區
OBJECTSTORE_SNI_PACKET 管理連線的伺服器網路介面 (SNI) 元件會使用此物件存放區
OBJECTSTORE_XACT_CACHE 此物件存放區用來快取交易資訊
USERSTORE_DBMETADATA 此物件存放區用於元數據結構
USERSTORE_OBJPERM 此存放區用於追蹤物件安全性/許可權的結構
USERSTORE_QDSSTMT 此快取存放區可用來快取 查詢存放區 語句
USERSTORE_SCHEMAMGR 架構管理員快取會將資料庫物件的不同元數據資訊儲存在記憶體中(例如數據表)。 此存放區的常見使用者可能是tempdb資料庫,其物件包括數據表、暫存程式、資料表變數、資料表值參數、工作數據表、工作檔、版本存放區。
USERSTORE_SXC 此使用者存放區用於配置來儲存所有 RPC 參數。
USERSTORE_TOKENPERM TokenAndPermUserStore 是單一 SOS 使用者存放區,可追蹤安全性內容、登入、使用者、許可權和稽核的安全性專案。 系統會配置多個哈希表來儲存這些物件。

注意

檔使用一般參考索引的 B 型樹狀結構一詞。 在數據列存放區索引中,資料庫引擎 會實作 B+ 樹狀結構。 這不適用於記憶體優化數據表上的數據行存放區索引或索引。 如需詳細資訊,請參閱 SQL Server 和 Azure SQL 索引架構和設計指南

另請參閱

SQL Server 操作系統相關動態管理檢視 (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)