sys.dm_os_latch_stats (Transact-SQL)
適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
Analytics 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 物件