sys.dm_os_spinlock_stats (Transact-SQL)

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

返回有关按类型组织的所有旋转锁等待的信息。

列名称 数据类型 说明
name nvarchar(256) 旋转锁类型的名称。
碰撞 bigint 线程尝试获取旋转锁并被阻止的次数,因为另一个线程当前持有旋转锁。
旋转 bigint 尝试获取旋转锁时线程执行循环的次数。
spins_per_collision real 每次冲突的旋转比率。
sleep_time bigint 线程在退避时所花费的时间(以毫秒为单位)。
backoffs bigint 线程“旋转”无法获取旋转锁并生成计划程序的次数。

权限

对于 SQL Server 和 SQL 托管实例,需要 VIEW SERVER STATE 权限。

在Azure SQL 数据库基本、S0S1 服务目标以及弹性池中的数据库,需要服务器管理员帐户、Microsoft Entra 管理员帐户或服务器角色的成员##MS_ServerStateReader##身份。 对于所有其他 SQL 数据库服务目标,需要数据库的 VIEW DATABASE STATE 权限或 ##MS_ServerStateReader## 服务器角色中的成员身份。

SQL Server 2022 及更高版本的权限

要求对服务器具有 VIEW SERVER PERFORMANCE STATE 权限。

注解

sys.dm_os_spinlock_stats 可用于标识旋转锁争用的来源。 在某些情况下,可以解决或减少旋转锁争用。 但是,在某些情况下,可能需要联系Microsoft客户支持服务。

可按如下所示重置内容sys.dm_os_spinlock_statsDBCC SQLPERF

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

这将使所有计数器重置为 0。

注意

如果重新启动 SQL Server,则不会保留这些统计信息。 自上次重置统计信息或 SQL Server 启动以来,所有数据都是累积的。

旋转锁

旋转锁是一个轻型同步对象,用于序列化对通常长时间保留的数据结构的访问。 当线程尝试访问受另一个线程所持有的旋转锁保护的资源时,线程将执行循环或“旋转”,然后再次尝试访问资源,而不是立即让计划程序像闩锁或其他资源等待一样产生计划程序。 线程将继续旋转,直到资源可用或循环完成,此时线程将生成计划程序并返回到可运行队列。 这种做法有助于减少线程上下文切换过多,但当旋转锁争用较高时,可能会观察到大量 CPU 使用率。

SQL Server 2022 (16.x) 中引入的数据库引擎的内部调整使旋转锁更高效。

注意

如果已在 Intel Skylake 处理器上安装 SQL Server,请查看 KB4538688 应用所需的更新并启用 跟踪标志 8101

下表包含一些最常见的旋转锁类型的简要说明。

Spinlock 类型 说明
ABR 仅供内部使用。
ADB_CACHE 仅供内部使用。
ALLOC_CACHES_HASH 仅供内部使用。
APPENDONLY_STORAGE 仅供内部使用。
APRC_BACK_OFF_STATS 仅供内部使用。
APRC_EVENT_LIST 仅供内部使用。
APRC_QUEUE_LIST 仅供内部使用。
APRC_VALIDATION_QUEUE_LIST 仅供内部使用。
ASYNC_OP_ADMIN_CLIENT_REGISTRATION_LIST 仅供内部使用。
ASYNC_OP_ADMIN_WORK_REGISTRATION_HASH_TABLE 仅供内部使用。
ASYNCSTATSLIST 仅供内部使用。
BACKUP 仅供内部使用。
BACKUP_COPY_CONTEXT 仅供内部使用。
BACKUP_CTX 保护对该特定数据库进行备份时对 I/O 中涉及的页面列表的访问。 在备份操作期间发生长检查点或 lazwriter 活动时,可能会观察到高旋转。 可以使用以下方法之一获得缓解:

- a) 使用 间接检查点 而不是 自动检查点

- b) 通过正确分配此实例所需的内存来最大程度地减少延迟写入活动

- c) 避免实例上的数据库并发备份过多
BASE_XACT_HASH 仅供内部使用。
BLOCKER_ENUM 仅供内部使用。
BPREPARTITION 仅供内部使用。
BPWORKFILE 仅供内部使用。
BUF_HASH 仅供内部使用。
BUF_LINK 仅供内部使用。
BUF_WRITE_LOG 仅供内部使用。
CACHEOBJ_DBG 仅供内部使用。
CHANNELFORCECLOSEMANAGER 仅供内部使用。
CHECK_AGGREGATE_STATE 仅供内部使用。
CLR_HOSTTASK 仅供内部使用。
CLR_SPIN_LOCK 仅供内部使用。
CMED_DATABASE 仅供内部使用。
CMED_HASH_SET 仅供内部使用。

适用于: SQL Server (SQL Server 2014 (12.x) 到 SQL Server 2016 (13.x) CU 1)

注意: 应用 SQL Server 2016 CU 2 后,此旋转锁名称更改为LOCK_RW_CMED_HASH_SET。
COLUMNDATASETSESSIONLIST 仅供内部使用。
COLUMNSTORE_HASHTABLE 仅供内部使用。
COLUMNSTOREBUILDSTATE_LIST 仅供内部使用。
COM_INIT 仅供内部使用。
可提交 仅供内部使用。
COMPPLAN_SKELETON 仅供内部使用。
CONNECTION_MANAGER 仅供内部使用。
连接 仅供内部使用。
CSIBUILDMEM 仅供内部使用。
CURSOR 仅供内部使用。
CURSQL 仅供内部使用。
DATAPORTCONSUMER 仅供内部使用。
DATAPORTSOURCEINFOCREDIT 仅供内部使用。
DATAPORTSOURCEINFOQUEUE 仅供内部使用。
DATASET_FREELIST 仅供内部使用。
DBCC_CHECK 仅供内部使用。
DBSEEDING_OPERATION 仅供内部使用。
DBT_HASH 仅供内部使用。
DBT_IO_LIST 仅供内部使用。
DBTABLE 控制对包含该数据库属性数据库引擎中每个数据库的内存中数据结构的访问。 有关详细信息,请参阅 通过优化 SQL 2014 和 SQL 2016 中的数据库包含检查来改进 SQL Server 工作负荷的并发性和可伸缩性。
DEFERRED_WF_EXT_DROP 仅供内部使用。
DEK_INSTANCE 仅供内部使用。
DELAYED_PARTITIONED_STACK 仅供内部使用。
DELETEBITMAP 仅供内部使用。
DIAG_MANAGER 仅供内部使用。
DIAG_OBJECT 仅供内部使用。
DIGEST_CACHE 仅供内部使用。
DINPBUF 仅供内部使用。
DIRECTLOGCONSUMER 仅供内部使用。
DP_LIST 控制对已启用间接检查点的数据库脏页列表的访问。 应用KB4497928、KB4040276或使用跟踪标志 3468修补程序 有关详细信息,请参阅 间接检查点和 tempdb - 良好、不良和非生成计划程序
DROP 仅供内部使用。
DROP_TEMPO 仅供内部使用。
DROPPED_ALLOC_UNIT 仅供内部使用。
DTC_HASHTABLE 仅供内部使用。
DTT_LIST 仅供内部使用。
ENDD_LIST 仅供内部使用。
EXT_CACHE 仅供内部使用。
EXTENT_ACTIVATION 仅供内部使用。
FABRIC_DB_MGR_PTR 仅供内部使用。
FABRIC_LOG_MANAGEMENT_INPUT_VALUE 仅供内部使用。
FABRIC_REPLICA_TRANSPORT 仅供内部使用。
FABRIC_TVF_DATA_CONSUMER_LIST 仅供内部使用。
FABRIC_TVF_LOAD_LIB 仅供内部使用。
FCB_REPLICA_SYNC 仅供内部使用。
FGCB_PRP_FILL 仅供内部使用。
FILE_HANDLE_CACHE 仅供内部使用。
FILE_TABLE 仅供内部使用。
FILESTREAM_CHUNKER 仅供内部使用。
FREE_SPACE_CACHE_ENTRY 仅供内部使用。
FS_CONTAINER_LIST_WITH_DELETE 仅供内部使用。
FS_DELETED_FOLDER_CLEANUP 仅供内部使用。
FSAGENT 仅供内部使用。
FSGHOST_STATUS 仅供内部使用。
FT_INIT 仅供内部使用。
GHOST_FREE 仅供内部使用。
GHOST_HASH 仅供内部使用。
GLOBAL_SCHEDULER_LIST 仅供内部使用。
GLOBAL_TRACE_FLAGS 仅供内部使用。
GLOBALTRANS 仅供内部使用。
GROUP_COMMIT_FEEDBACK_LOOP 仅供内部使用。
GUARDIAN 仅供内部使用。
HADR_AGH_X_ACCESS 仅供内部使用。
HADR_AR_CONTROLLER_COLLECTION 仅供内部使用。
HADR_AR_DB_MGR 仅供内部使用。
HADR_AR_TRANSPORT 仅供内部使用。
HADR_COMPRESSION_MGR_POOL 仅供内部使用。
HADR_FABRIC_FACTORY 仅供内部使用。
HADR_PRIORITY_QUEUE 仅供内部使用。
HADR_TRANSPORT_CONTROL 仅供内部使用。
HADR_TRANSPORT_LIST 仅供内部使用。
HADRSEEDINGLIST 仅供内部使用。
HOBT_DROPPED 仅供内部使用。
HOBT_HASH 仅供内部使用。
HTTP 仅供内部使用。
HTTP_CONNCACHE 仅供内部使用。
HTTP_ENDPOINT 仅供内部使用。
IDENTITY 仅供内部使用。
INDEX_CREATE 仅供内部使用。
IO_DISPENSER_PAUSE 仅供内部使用。
IO_RG_VOLUME_HASHTABLE 仅供内部使用。
IOREQ 仅供内部使用。
ISSRESOURCE 仅供内部使用。
KTM_ENLISTMENT 仅供内部使用。
LANG_RES_LOAD 仅供内部使用。
LIVE_TARGET_TVF 仅供内部使用。
LOCK_FREE_LIST 仅供内部使用。
LOCK_HASH 保护对锁管理器哈希表的访问,该表存储有关保存在数据库中的锁的信息。 有关详细信息,请参阅 KB2926217事务锁定和行版本控制指南
LOCK_NOTIFICATION 仅供内部使用。
LOCK_RESOURCE_ID 仅供内部使用。
LOCK_RW_ABTX_HASH_SET 仅供内部使用。
LOCK_RW_AGDB_HEALTH_DIAG 仅供内部使用。
LOCK_RW_CMED_HASH_SET 仅供内部使用。

适用于:SQL Server(从 SQL Server 2016(13.x) CU 2 开始)、Azure SQL 数据库和Azure SQL 托管实例
LOCK_RW_DPT_TABLE 仅供内部使用。
LOCK_RW_IN_ROW_TRACKER 仅供内部使用。
LOCK_RW_LOGIN_RATE_STATS 仅供内部使用。
LOCK_RW_PVS_PAGE_TRACKER 仅供内部使用。
LOCK_RW_RBIO_REQ 仅供内部使用。
LOCK_RW_SECURITY_CACHE 保护与安全令牌和访问检查相关的缓存条目。

适用于:SQL Server(从 SQL Server 2016(13.x) CU 2 开始)、Azure SQL 数据库和Azure SQL 托管实例

如果 TokenAndPermUserStore 缓存存储中的条目持续增长,你可能会注意到此旋转锁出现较大的旋转。 使用跟踪标志 46104618 评估以限制条目。 有关详细信息,请参阅访问检查缓存服务器配置选项当 TokenAndPermUserStore 缓存的大小在 SQL Server 中增长以及与大型安全缓存关联的查询性能问题时,查询需要更长的时间才能完成。
LOCK_RW_TEST 仅供内部使用。
LOCK_RW_WPR_BUCKET 仅供内部使用。
LOCK_SORT_STREAM 仅供内部使用。
LOCK_SQLSATELLITE_MESSAGE 仅供内部使用。
LOG_CONSOLIDATION 仅供内部使用。
LOG_RG_GOVERNOR 仅供内部使用。
LOGCACHE_ACCESS 仅供内部使用。
LOGFLUSHQ 仅供内部使用。
LOGIOSEQ 仅供内部使用。
LOGIOSEQMAPPENDINGMESSAGEQUEUE 仅供内部使用。
LOGLC 仅供内部使用。
LOGLFM 仅供内部使用。
LOGON_TRIGGER_CACHE 仅供内部使用。
LOGPOOL_HASHBUCKET 仅供内部使用。
LOGPOOL_REFCOUNTEDOBJECT 仅供内部使用。
LOGPOOL_SHAREDCACHEBUFFER 仅供内部使用。
LOGPOOL_SIZEPERRESOURCEPOOL 仅供内部使用。
LPE_BATCH 仅供内部使用。
LPE_SESSION 仅供内部使用。
LPE_SXTP 仅供内部使用。
LSID 仅供内部使用。
LSLIST 仅供内部使用。
LSNREFLIST 仅供内部使用。
LSS_SYNC_DTC 仅供内部使用。
MD_CHANGE_NOTIFICATION 仅供内部使用。
MDB_REMOTE_BATCH_STATS_HASH_TABLE 仅供内部使用。
MDB_REMOTE_SESSION_HASH_TABLE 仅供内部使用。
MEM_MGR 仅供内部使用。
MGR_CACHE 仅供内部使用。
MIGRATION_BUF_LIST 仅供内部使用。
MUTEX 保护与安全令牌和访问检查相关的缓存条目。

适用于: SQL Server (最高为 SQL Server 2012 (11.x)

如果 TokenAndPermUserStore 缓存存储中的条目持续增长,你可能会注意到此旋转锁出现较大的旋转。 使用跟踪标志 46104618 评估以限制条目。 有关详细信息,请参阅访问检查缓存服务器配置选项当 TokenAndPermUserStore 缓存的大小在 SQL Server 中增长以及与大型安全缓存关联的查询性能问题时,查询需要更长的时间才能完成。
NETCONN_ADDRESS 仅供内部使用。
ONDEMAND_TASK 仅供内部使用。
ONE_PROC_SIM_NODE_CONTEXT 仅供内部使用。
ONE_PROC_SIM_NODE_CONTEXT_LIST 仅供内部使用。
ONE_PROC_SIM_REPLICA_CONTEXT 仅供内部使用。
ONE_PROC_SIM_SERVICE_PARTITION 仅供内部使用。
OPT_IDX_MISS_ID 仅供内部使用。
OPT_IDX_MISS_KEY 仅供内部使用。
OPT_IDX_STATS 仅供内部使用。
OPT_INFO_MGR 仅供内部使用。
PAGE_WORKITEMLIST 仅供内部使用。
PAGECOPIER 仅供内部使用。
PARALLELREDOCACHE 仅供内部使用。
PARTITIONED_HEAP_FREE_LIST 仅供内部使用。
PROGRESS_REPORT 仅供内部使用。
QE_SHUTDOWN 仅供内部使用。
QSCAN_CACHE 仅供内部使用。
QUERY_EXEC_STATS 仅供内部使用。
QUERY_STORE_ASYNC_PERSIST 仅供内部使用。
QUERY_STORE_ASYNC_QUEUE_TLIST 仅供内部使用。
QUERY_STORE_CAPTURE_POLICY_INTERVAL 仅供内部使用。
QUERY_STORE_CAPTURE_POLICY_STATS 仅供内部使用。
QUERY_STORE_CAPTURE_POLICY_THRESHOLD 仅供内部使用。
QUERY_STORE_CURRENT_INTERVAL 仅供内部使用。
QUERY_STORE_HT_CACHE 仅供内部使用。
QUERY_STORE_LIST 仅供内部使用。
QUERY_STORE_PLAN_COMP_AGG 仅供内部使用。
QUERY_STORE_PLAN_LIST 仅供内部使用。
QUERY_STORE_READ_ONLY_FLAGS 仅供内部使用。
QUERY_STORE_SELF_AGG 仅供内部使用。
QUERY_STORE_STMT_COMP_AGG 仅供内部使用。
QUERYEXEC 仅供内部使用。
QUERYSCAN 仅供内部使用。
RANGE_GENERATION 仅供内部使用。
READ_AHEAD 仅供内部使用。
REDOMGRSTATE 仅供内部使用。
REMOTE_SESSION_CACHE 仅供内部使用。
REMOTEBLOCKIO 仅供内部使用。
REMOTEOP 仅供内部使用。
REPL_LOGREADER_HISTORY_CACHE 仅供内部使用。
REPL_LOGREADER_PERDB_HISTORY_CACHE 仅供内部使用。
RESMANAGER 仅供内部使用。
资源 仅供内部使用。
RESQUEUE 仅供内部使用。
RFS_THREAD_QUEUE 仅供内部使用。
RG_TIMER 仅供内部使用。
ROWGROUP_VERSIONS 仅供内部使用。
RPCCHANNELPOOL 仅供内部使用。
RPCPACKAGE 仅供内部使用。
RPCREQUESTORCONTEXT 仅供内部使用。
RWLOCK_LAST 仅供内部使用。
SATELLITE_CONNECTION 仅供内部使用。
SBS_CLIENT_ENDPOINTS 仅供内部使用。
SBS_CLIENT_REQUESTS 仅供内部使用。
SBS_DISPATCH 仅供内部使用。
SBS_PENDING 仅供内部使用。
SBS_SERVER_XACT_TASK_PROXY 仅供内部使用。
SBS_TRANSPORT 仅供内部使用。
SBS_UCS_DISPATCH 仅供内部使用。
安全性 仅供内部使用。
SECURITY_CACHE 保护与安全令牌和访问检查相关的缓存条目。

适用于: SQL Server (SQL Server 2014 (12.x) 到 SQL Server 2016 (13.x) CU 1)

如果 TokenAndPermUserStore 缓存存储中的条目持续增长,你可能会注意到此旋转锁出现较大的旋转。 使用跟踪标志 46104618 评估以限制条目。 有关详细信息,请参阅访问检查缓存服务器配置选项当 TokenAndPermUserStore 缓存的大小在 SQL Server 中增长以及与大型安全缓存关联的查询性能问题时,查询需要更长的时间才能完成。

注意: 应用 SQL Server 2016 CU 2 后,此旋转锁名称更改为LOCK_RW_SECURITY_CACHE。
SECURITY_FEDAUTH_AAD_BECWSCONNS 仅供内部使用。
SEMANTIC_TICACHE 仅供内部使用。
SEQUENCED_OBJECT 仅供内部使用。
SEQUEUE_SIZED_THREADSAFE 仅供内部使用。
SESSION_KILLER 仅供内部使用。
SESSION_MANAGER 仅供内部使用。
SESSION_SEC_CONTEXT 仅供内部使用。
SETRANGE_SYNC 仅供内部使用。
SHARABLE_SESSION_OBJECTS 仅供内部使用。
SLO_INFO_LIST 仅供内部使用。
SNI 仅供内部使用。
SNI_NODE_PENDING_IO_QUEUE 仅供内部使用。
SOAPSESSIONS 仅供内部使用。
SOS_ABORT_TASK 仅供内部使用。
SOS_ACTIVEDESCRIPTOR 仅供内部使用。
SOS_BLOCKALLOCPARTIALLIST 仅供内部使用。
SOS_BLOCKDESCRIPTORBUCKET 仅供内部使用。
SOS_CACHESTORE 同步对数据库引擎中各种内存中缓存的访问,例如计划缓存或临时表缓存。 此旋转锁类型的大量争用可能意味着许多不同的内容,具体取决于争用中的特定缓存。 请联系Microsoft客户支持服务,帮助排查此旋转锁类型问题。
SOS_CACHESTORE_CLOCK 仅供内部使用。
SOS_CLOCKALG_INTERNODE_SYNC 仅供内部使用。
SOS_DEBUG_HOOK 仅供内部使用。
SOS_DESCDATABUFFERLIST 仅供内部使用。
SOS_LARGEPAGE_ALLOCATOR 仅供内部使用。
SOS_MINITHREAD 仅供内部使用。
SOS_NODE 仅供内部使用。
SOS_OBJECT_POOL 仅供内部使用。
SOS_OBJECT_STORE 仅供内部使用。
SOS_OOM_CHECK 仅供内部使用。
SOS_PHYS_PAGE_CACHE 仅供内部使用。
SOS_RESOURCE_CLERK_LIST 仅供内部使用。
SOS_RINGBUFFER_RECORD 仅供内部使用。
SOS_RW 仅供内部使用。
SOS_SATELLITE_USER_POOL 仅供内部使用。
SOS_SCHEDULER 仅供内部使用。
SOS_SELIST_SIZED_SLOCK 仅供内部使用。
SOS_SUSPEND_QUEUE 仅供内部使用。
SOS_SYSTHREAD 仅供内部使用。
SOS_SYSTHREAD_DISPATCHER 仅供内部使用。
SOS_TASK 仅供内部使用。
SOS_TLIST 仅供内部使用。
SOS_VM_LOW 仅供内部使用。
SOS_WAIT_STATS 仅供内部使用。
SOS_WAITABLE_ADDRESS_HASHBUCKET 仅供内部使用。
SPIN_EVENT_MUTEX 仅供内部使用。
SPL_DISPATCHER_LIST 仅供内部使用。
SPL_DISPATCHER_QUEUE 仅供内部使用。
SPL_NONYIELD_ANALYSIS 仅供内部使用。
SPL_QUERY_STORE_CTX_INITIALIZED 仅供内部使用。
SPL_QUERY_STORE_EXEC_STATS_AGG 仅供内部使用。
SPL_QUERY_STORE_EXEC_STATS_READ 仅供内部使用。
SPL_QUERY_STORE_STATS_COOKIE_CACHE 仅供内部使用。
SPL_SOS_DISPATCHER 仅供内部使用。
SPL_TDS_PKT_QUEUE 仅供内部使用。
SPL_XE_BUFFER_MGR 仅供内部使用。
SPL_XE_DISPATCHER_QUEUE 仅供内部使用。
SPL_XE_NOTIFICATION_CALLBACK_LIST 仅供内部使用。
SPL_XE_SESSION_EVENT_MGR 仅供内部使用。
SPL_XE_SESSION_MGR 仅供内部使用。
SPL_XE_SESSION_TARGET_MGR 仅供内部使用。
SPT_PROFILE 仅供内部使用。
SQL_MGR 仅供内部使用。
SQL_NORM 仅供内部使用。
SQLTRACE_FILE_BUFFER 仅供内部使用。
SRVPROC 仅供内部使用。
STACK_HASHER 仅供内部使用。
SUBLATCH 仅供内部使用。
SUBPDESC 仅供内部使用。
SUBPDESC_LIST 仅供内部使用。
SVC_BROKER_CTRL 仅供内部使用。
SVC_BROKER_DEBUG_LIST 仅供内部使用。
SVC_BROKER_LIST 仅供内部使用。
SVC_BROKER_OBJECT 仅供内部使用。
SYNCPOINT_RESOURCE 仅供内部使用。
TaskElapsedExecutionMonitor 仅供内部使用。
TDS_TVP 仅供内部使用。
TESTTEAM 仅供内部使用。
TESTTEAMEXPONENTIAL 仅供内部使用。
TESTTEAMEXPONENTIALTASTAS 仅供内部使用。
TESTTEAMTASTAS 仅供内部使用。
TMP_SESS_KEY 仅供内部使用。
TSQL_DEBUG 仅供内部使用。
TXFRM_REPL 仅供内部使用。
VDI_OPERATION 仅供内部使用。
WINFAB_REPORT_FAULT 仅供内部使用。
WRITE_PAGE_RECORDER 仅供内部使用。
X_PACKET_LIST 仅供内部使用。
X_PIPE 仅供内部使用。
X_PIPE_DEMAND 仅供内部使用。
X_PORT 仅供内部使用。
XACT_LOCK_INFO 仅供内部使用。
XACT_LOCKINFO_TASK 仅供内部使用。
XACT_WORKSPACE 仅供内部使用。
XCB 仅供内部使用。
XCB_FREE_LIST 仅供内部使用。
XCB_HASH 仅供内部使用。
XCHNG_TRACE 仅供内部使用。
XDES 仅供内部使用。
XDES_HASH 仅供内部使用。
XDESMGR 仅供内部使用。
XDESTABLELIST 仅供内部使用。
XE_RATE_LIMITER_STRETCHDB 仅供内部使用。
XE_SESSION_STORAGE 仅供内部使用。
XID_ARRAY 仅供内部使用。
XIO_BLOCKLIST 仅供内部使用。
XIO_REQSTR 仅供内部使用。
XIO_SEQNUMBUMP 仅供内部使用。
XIOSTATS 仅供内部使用。
XTP_RT_DATA_LIST 仅供内部使用。
XTS_MGR 仅供内部使用。
XVB_CSN 仅供内部使用。
XVB_LIST 仅供内部使用。

另请参阅