sys.dm_os_latch_stats (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

傳回依類別組織之所有閂鎖等候的相關資訊。

注意

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

資料行名稱 資料類型 描述
latch_class nvarchar(60) 閂鎖類別的名稱。
waiting_requests_count bigint 此類別中的閂鎖等候次數。 這個計數器是從開始閂鎖等候時逐量遞增計算。
wait_time_ms bigint 此類別閂鎖上的等候時間總計,以毫秒為單位。

注意: 此資料行會在閂鎖等候和閂鎖等候結束時每隔五分鐘更新一次。
max_wait_time_ms bigint 記憶體物件在此閂鎖上等候的時間上限。 如果此值異常高,則可能表示內部死結。
pdw_node_id int 適用於:Azure Synapse Analytics、Analytics Platform System (PDW)

此散發節點的識別碼。

權限

在 SQL Server 和 SQL 受控執行個體上,需要 VIEW SERVER STATE 權限。

在SQL 資料庫基本、S0 S1 服務目標上,以及彈性集 區中的 資料庫, 需要伺服器管理員 帳戶、 Microsoft Entra 系統管理員 帳戶或伺服器角色 的成員 ##MS_ServerStateReader## 資格。 在所有其他 SQL Database 服務目標上,需要資料庫的 VIEW DATABASE STATE 權限或 ##MS_ServerStateReader## 伺服器角色的成員資格。

SQL Server 2022 及更新版本的權限

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

備註

sys.dm_os_latch_stats可用來檢查不同閂鎖類別的相對等候號碼和等候時間,以識別閂鎖爭用的來源。 在某些情況下,您可以解決或減少閂鎖爭用。 不過,在某些情況下,可能會要求您連絡 Microsoft 客戶支援服務。

您可以使用 下列方式重設sys.dm_os_latch_stats DBCC SQLPERF 的內容:

DBCC SQLPERF ('sys.dm_os_latch_stats', CLEAR);  
GO  

這會將所有計數器重設為 0。

注意

如果重新開機 SQL Server,則不會保存這些統計資料。 自上次重設統計資料或 SQL Server 啟動時,所有資料都是累積的。

閂鎖

閂鎖是類似于鎖定的內部輕量型同步處理物件,由各種 SQL Server 元件使用。 閂鎖主要用於在緩衝區或檔案存取等作業期間同步處理資料庫頁面。 每個閂鎖都會與單一配置單位相關聯。

當無法立即授與閂鎖要求時,就會發生閂鎖等候,因為閂鎖由另一個執行緒在衝突模式中保留。 與鎖定不同,即使在寫入作業中,閂鎖也會在作業之後立即釋放。

閂鎖會根據元件和使用方式分組為類別。 特定類別的零或多個閂鎖可以存在於 SQL Server 實例的任何時間點。

注意

sys.dm_os_latch_stats 不會追蹤立即授與的閂鎖要求,或未等候而失敗。

下表包含各種閂鎖類別的簡短描述。

Latch 類別 描述
ALLOC_CREATE_RINGBUF SQL Server 在內部使用,初始化建立配置通道緩衝區的同步處理。
ALLOC_CREATE_FREESPACE_CACHE 用來初始化堆積的內部可用空間快取同步處理。
ALLOC_CACHE_MANAGER 用來同步處理內部一致性測試。
ALLOC_FREESPACE_CACHE 用來同步處理頁面快取的存取權,以及堆積和二進位大型物件 (BLOB) 的可用空間。 當多個連線同時嘗試將資料列插入堆積或 BLOB 時,可能會發生此類別閂鎖上的爭用。 您可以藉由分割 物件來減少此爭用。 每個分割區都有自己的閂鎖。 資料分割會將插入分散到多個閂鎖。
ALLOC_EXTENT_CACHE 用來同步存取包含未配置之頁面的範圍快取。 當多個連線同時嘗試在同一配置單位中配置資料頁面時,可能會發生此類別閂鎖上的爭用。 此爭用可藉由分割此配置單位所屬的物件來減少。
ACCESS_METHODS_DATASET_PARENT 用來在平行作業期間同步處理父資料集的子資料集存取。
ACCESS_METHODS_HOBT_FACTORY 用來同步存取內部雜湊表。
ACCESS_METHODS_HOBT 用來同步處理 HoBt 記憶體內部表示的存取。
ACCESS_METHODS_HOBT_COUNT 用來同步處理 HoBt 頁面和資料列計數器的存取。
ACCESS_METHODS_HOBT_VIRTUAL_ROOT 用來同步存取內部 B 型樹狀結構的根頁面抽象概念。
ACCESS_METHODS_CACHE_ONLY_HOBT_ALLOC 用來同步處理工作資料表存取。
ACCESS_METHODS_BULK_ALLOC 用來同步大量配置器內的存取。
ACCESS_METHODS_SCAN_RANGE_GENERATOR 用來在平行掃描期間同步存取範圍產生器。
ACCESS_METHODS_KEY_RANGE_GENERATOR 用來同步處理金鑰範圍平行掃描期間讀取預先作業的存取。
APPEND_ONLY_STORAGE_INSERT_POINT 用來同步處理快速附加儲存單位中的插入。
APPEND_ONLY_STORAGE_FIRST_ALLOC 用來同步處理僅限附加儲存單位的第一個配置。
APPEND_ONLY_STORAGE_UNIT_MANAGER 用於快速附加專用儲存體單元管理員內的內部資料結構存取同步處理。
APPEND_ONLY_STORAGE_MANAGER 用來同步處理快速附加專用儲存體單元管理員中的壓縮作業。
BACKUP_RESULT_SET 用來同步處理平行備份結果集。
BACKUP_TAPE_POOL 用來同步處理備份磁帶組區。
BACKUP_LOG_REDO 用來同步處理備份記錄重做作業。
BACKUP_INSTANCE_ID 用來同步產生備份效能監視器計數器的實例識別碼。
BACKUP_MANAGER 用來同步處理內部備份管理員。
BACKUP_MANAGER_DIFFERENTIAL 用來同步處理差異備份作業與 DBCC。
BACKUP_OPERATION 用於備份作業內的內部資料結構同步處理,例如資料庫、記錄檔或檔案備份。
BACKUP_FILE_HANDLE 用來在還原作業期間同步處理檔案開啟作業。
緩衝區 用來同步處理資料庫頁面的短期存取。 讀取或修改任何資料庫頁面之前,必須先有緩衝區閂鎖。 緩衝區閂鎖爭用可能表示數個問題,包括經常性頁面和緩慢的 I/O。

此閂鎖類別涵蓋頁面閂鎖的所有可能用法。 sys.dm_os_wait_stats在頁面閂鎖等候之間有所差異,這些等候是由 I/O 作業和頁面上的讀取和寫入作業所造成。
BUFFER_POOL_GROW 用於緩衝集區成長作業期間的內部緩衝區管理員同步處理。
DATABASE_CHECKPOINT 用來序列化資料庫中的檢查點。
CLR_PROCEDURE_HASHTABLE 僅供內部使用。
CLR_UDX_STORE 僅供內部使用。
CLR_DATAT_ACCESS 僅供內部使用。
CLR_XVAR_PROXY_LIST 僅供內部使用。
DBCC_CHECK_AGGREGATE 僅供內部使用。
DBCC_CHECK_RESULTSET 僅供內部使用。
DBCC_CHECK_TABLE 僅供內部使用。
DBCC_CHECK_TABLE_INIT 僅供內部使用。
DBCC_CHECK_TRACE_LIST 僅供內部使用。
DBCC_FILE_CHECK_OBJECT 僅供內部使用。
DBCC_PERF 用來同步處理內部效能監視器計數器。
DBCC_PFS_STATUS 僅供內部使用。
DBCC_OBJECT_METADATA 僅供內部使用。
DBCC_HASH_DLL 僅供內部使用。
EVENTING_CACHE 僅供內部使用。
FCB 用來同步處理對檔案控制區塊的存取。
FCB_REPLICA 僅供內部使用。
FGCB_ALLOC 使用 來同步存取檔案群組內的迴圈配置資訊。
FGCB_ADD_REMOVE 用來同步處理檔案群組的存取權,以進行新增、卸載、成長和壓縮檔案作業。
FILEGROUP_MANAGER 僅供內部使用。
FILE_MANAGER 僅供內部使用。
FILESTREAM_FCB 僅供內部使用。
FILESTREAM_FILE_MANAGER 僅供內部使用。
FILESTREAM_GHOST_FILES 僅供內部使用。
FILESTREAM_DFS_ROOT 僅供內部使用。
LOG_MANAGER 僅供內部使用。
FULLTEXT_DOCUMENT_ID 僅供內部使用。
FULLTEXT_DOCUMENT_ID_TRANSACTION 僅供內部使用。
FULLTEXT_DOCUMENT_ID_NOTIFY 僅供內部使用。
FULLTEXT_LOGS 僅供內部使用。
FULLTEXT_CRAWL_LOG 僅供內部使用。
FULLTEXT_ADMIN 僅供內部使用。
FULLTEXT_AMDIN_COMMAND_CACHE 僅供內部使用。
FULLTEXT_LANGUAGE_TABLE 僅供內部使用。
FULLTEXT_CRAWL_DM_LIST 僅供內部使用。
FULLTEXT_CRAWL_CATALOG 僅供內部使用。
FULLTEXT_FILE_MANAGER 僅供內部使用。
DATABASE_MIRRORING_REDO 僅供內部使用。
DATABASE_MIRRORING_SERVER 僅供內部使用。
DATABASE_MIRRORING_CONNECTION 僅供內部使用。
DATABASE_MIRRORING_STREAM 僅供內部使用。
QUERY_OPTIMIZER_VD_MANAGER 僅供內部使用。
QUERY_OPTIMIZER_ID_MANAGER 僅供內部使用。
QUERY_OPTIMIZER_VIEW_REP 僅供內部使用。
RECOVERY_BAD_PAGE_TABLE 僅供內部使用。
RECOVERY_MANAGER 僅供內部使用。
SECURITY_OPERATION_RULE_TABLE 僅供內部使用。
SECURITY_OBJPERM_CACHE 僅供內部使用。
SECURITY_CRYPTO 僅供內部使用。
SECURITY_KEY_RING 僅供內部使用。
SECURITY_KEY_LIST 僅供內部使用。
SERVICE_BROKER_CONNECTION_RECEIVE 僅供內部使用。
SERVICE_BROKER_TRANSMISSION 僅供內部使用。
SERVICE_BROKER_TRANSMISSION_UPDATE 僅供內部使用。
SERVICE_BROKER_TRANSMISSION_STATE 僅供內部使用。
SERVICE_BROKER_TRANSMISSION_ERRORS 僅供內部使用。
SSBXmitWork 僅供內部使用。
SERVICE_BROKER_MESSAGE_TRANSMISSION 僅供內部使用。
SERVICE_BROKER_MAP_MANAGER 僅供內部使用。
SERVICE_BROKER_HOST_NAME 僅供內部使用。
SERVICE_BROKER_READ_CACHE 僅供內部使用。
SERVICE_BROKER_WAITFOR_MANAGER 用來同步處理等候佇列的實例層級對應。 每個資料庫識別碼、資料庫版本和佇列識別碼 Tuple 有一個佇列。 當許多連線為:處於 WAITFOR(RECEIVE) 等候狀態時,可能會發生此類別閂鎖的爭用:呼叫 WAITFOR(RECEIVE):超過 WAITFOR 逾時;接收訊息;認可或回復包含 WAITFOR(RECEIVE) 的交易:您可以藉由減少 WAITFOR(RECEIVE) 等候狀態中的執行緒數目來減少爭用。
SERVICE_BROKER_WAITFOR_TRANSACTION_DATA 僅供內部使用。
SERVICE_BROKER_TRANSMISSION_TRANSACTION_DATA 僅供內部使用。
SERVICE_BROKER_TRANSPORT 僅供內部使用。
SERVICE_BROKER_MIRROR_ROUTE 僅供內部使用。
TRACE_ID 僅供內部使用。
TRACE_AUDIT_ID 僅供內部使用。
TRACE 僅供內部使用。
TRACE_CONTROLLER 僅供內部使用。
TRACE_EVENT_QUEUE 僅供內部使用。
TRANSACTION_DISTRIBUTED_MARK 僅供內部使用。
TRANSACTION_OUTCOME 僅供內部使用。
NESTING_TRANSACTION_READONLY 僅供內部使用。
NESTING_TRANSACTION_FULL 僅供內部使用。
MSQL_TRANSACTION_MANAGER 僅供內部使用。
DATABASE_AUTONAME_MANAGER 僅供內部使用。
UTILITY_DYNAMIC_VECTOR 僅供內部使用。
UTILITY_SPARSE_BITMAP 僅供內部使用。
UTILITY_DATABASE_DROP 僅供內部使用。
UTILITY_DYNAMIC_MANAGER_VIEW 僅供內部使用。
UTILITY_DEBUG_FILESTREAM 僅供內部使用。
UTILITY_LOCK_INFORMATION 僅供內部使用。
VERSIONING_TRANSACTION 僅供內部使用。
VERSIONING_TRANSACTION_LIST 僅供內部使用。
VERSIONING_TRANSACTION_CHAIN 僅供內部使用。
VERSIONING_STATE 僅供內部使用。
VERSIONING_STATE_CHANGE 僅供內部使用。
KTM_VIRTUAL_CLOCK 僅供內部使用。

注意

SQL Server 文件通常會使用「B 型樹狀結構」一詞來指稱索引。 在資料列存放區索引中,SQL Server 會實作 B+ 樹狀結構。 這不適用於資料行存放區索引或記憶體內部資料存放區。 如需詳細資訊,請參閱 SQL Server 和 Azure SQL 索引架構和設計指南

另請參閱

DBCC SQLPERF (Transact-SQL)
SQL Server 作業系統相關動態管理檢視 (Transact-SQL)
SQL Server,Latches 物件