sys.dm_os_latch_stats (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)
返回有关按类组织的所有闩锁等待的信息。
注意
若要从 Azure Synapse Analytics 或 Analytics 平台系统(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 数据库服务目标,需要数据库的 VIEW DATABASE STATE
权限或 ##MS_ServerStateReader##
服务器角色中的成员身份。
SQL Server 2022 及更高版本的权限
要求对服务器具有 VIEW SERVER PERFORMANCE STATE 权限。
注解
通过检查不同闩锁类的相对等待数和等待时间,sys.dm_os_latch_stats 可以用来标识闩锁争用源。 在某些情况中,可能能够解决或减少闩锁争用。 但是,在某些情况下,可能需要联系Microsoft客户支持服务。
按如下所示使用 DBCC SQLPERF
,可以重置 sys.dm_os_latch_stats 的内容:
DBCC SQLPERF ('sys.dm_os_latch_stats', CLEAR);
GO
这将使所有计数器重置为 0。
注意
如果重新启动 SQL Server,则不会保留这些统计信息。 自上次重置统计信息或 SQL Server 启动以来,所有数据都是累积的。
闩锁
闩锁是类似于锁的内部轻型同步对象,由各种 SQL Server 组件使用。 闩锁主要用于在缓冲区或文件访问等操作期间同步数据库页。 每个闩锁与单个分配单元关联。
由于闩锁由冲突模式中的另一个线程持有,所以当无法立即满足闩锁请求时,就会发生闩锁等待。 与锁不同,在操作之后,甚至在写入操作中,会立即释放闩锁。
闩锁根据组件和用法划分为不同的类。 特定类的零个或多个闩锁可以在 SQL Server 实例中的任何时间点存在。
注意
sys.dm_os_latch_stats
不跟踪立即授予的闩锁请求,也不会跟踪未等待失败的请求。
下表包含对各种闩锁类的简短说明。
闩锁类 | 说明 |
---|---|
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 | 用于同步为备份性能监视计数器生成实例 ID 的过程。 |
BACKUP_MANAGER | 用于同步内部备份管理器。 |
BACKUP_MANAGER_DIFFERENTIAL | 用于同步用 DBCC 执行的差异备份操作。 |
BACKUP_OPERATION | 用于备份操作(例如,数据库、日志或文件备份)中的内部数据结构同步。 |
BACKUP_FILE_HANDLE | 用于同步在还原操作期间的文件打开操作。 |
BUFFER | 用于同步对数据库页的短期访问。 读取或修改任何数据库页之前,必须使用缓冲区闩锁。 缓冲区闩锁争用可以指示出现了几个问题,包括热页和缓慢 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 | 用于同步等待队列的实例级别映射。 每个数据库 ID、数据库版本和队列 ID 元组存在一个队列。 当许多连接处于 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 | 仅供内部使用。 |
注意
文档在提到索引时一般使用 B 树这个术语。 在行存储索引中,数据库引擎实现了 B+ 树。 这不适用于列存储索引或内存优化表上的索引。 有关详细信息,请参阅 SQL Server 以及 Azure SQL 索引体系结构和设计指南。
另请参阅
DBCC SQLPERF (Transact-SQL)
与 SQL Server 操作系统相关的动态管理视图 (Transact-SQL)
SQL Server - Latches 对象