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_execute或sp_prepexec系統程序執行。 此外,伺服器端數據指標會從這個快取存放區取用 (sp_cursoropen、 sp_cursorfetch、 sp_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) 。 如需此空間中修正的詳細資訊,請參閱知識庫文章4468102和 KB 文章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)