sys.dm_os_latch_stats (Transact-SQL)

返回按类组织的所有闩锁等待的相关信息。

列名

数据类型

说明

latch_class

nvarchar(120)

闩锁类的名称。

waiting_requests_count

bigint

此类中的闩锁等待的个数。此计数器在闩锁等待启动时递增。

wait_time_ms

bigint

此类中闩锁的总计等待时间(毫秒)。

注意注意
此列在闩锁等待期间每五分钟更新一次,在闩锁等待结束时也会更新。

max_wait_time_ms

bigint

内存对象已等待此闩锁的最大时间。如果此值异常高,则可能指示有内部死锁。

权限

需要对服务器具有 VIEW SERVER 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

用于同步对文件组的 ADD 和 DROP 文件操作的访问。

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

仅供内部使用。

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

仅供内部使用。