PERFORMANCE_COUNTERS_RWLOCK is recorded when a thread waits on the reader-writer lock protecting the performance counter structures while a counter instance is added or removed. Many SQL Server counters are per-instance-of-something, per database, per Availability Group, per resource pool, so creating or dropping those objects touches the counter registry through this lock. Counter bookkeeping, exercised by…
The PREEMPTIVE_COM_* waits track threads calling methods on COM objects, in DBA practice almost always the OLE DB providers behind linked servers and OPENROWSET/OPENQUERY. This page covers the family: All are preemptive: the thread runs under Windows control until the COM call returns. Are They a Problem? They are the itemised bill for external provider…
Distributed transactions route through the Microsoft Distributed Transaction Coordinator (MSDTC), and SQL Server’s calls into it are preemptive, the thread leaves cooperative scheduling until MSDTC answers. This page covers the family: Together they meter how much time your sessions spend talking to the transaction coordinator. Are They a Problem? They are honest latency accounting for…
PREEMPTIVE_HADR_LEASE_MECHANISM is recorded when a thread switches to preemptive mode to renew the lease between the failover cluster and the SQL Server resource DLL, following a lease timeout. The lease is the AG’s dead-man switch: SQL Server and the cluster exchange heartbeats, and if the lease expires, the cluster concludes SQL Server is unhealthy and…
PREEMPTIVE_OLEDBOPS is recorded when a thread switches to preemptive mode (outside SQL Server’s cooperative scheduler) to communicate with an OLE DB provider. It is the third member of the linked server wait family: OLEDB covers provider calls generally, MSQL_DQ covers distributed query completion, and this one covers assorted provider operations made preemptively, connection management and…
A cluster of preemptive waits track Windows group membership and directory queries, and this page covers them together: PREEMPTIVE_OS_NETGROUPGETUSERS, NETLOCALGROUPGETMEMBERS, NETUSERGETGROUPS, NETUSERGETLOCALGROUPS, NETUSERMODALSGET, DOMAINSERVICESOPS, and DIRSVC_NETWORKOPS. They fire when SQL Server asks Windows who belongs to what: resolving a Windows group login’s membership, xp_logininfo enumerating group members, IS_MEMBER() checks that miss the token cache, and…
PREEMPTIVE_OS_AUTHENTICATIONOPS is recorded when a thread calls Windows security functions for authentication and authorisation work: validating logins, checking group memberships, building security tokens. The thread runs preemptively (outside SQL Server’s scheduler, state showing RUNNING) until Windows answers. Every Windows-authenticated login touches this path, so some volume is a fact of life on domain-joined servers. The…
Two preemptive waits track Windows Server Failover Clustering API calls, and this page covers both: PREEMPTIVE_OS_CLUSTEROPS (the generic bucket for cluster operations) and PREEMPTIVE_CLUSAPI_CLUSTERRESOURCECONTROL (calls to the cluster resource control API, querying and manipulating cluster resource properties). Failover Cluster Instances and Availability Groups both live with one foot in WSFC, so cluster-aware instances accumulate these…
PREEMPTIVE_OS_CREATEFILE is recorded while a thread calls the Windows CreateFile function. The name misleads slightly: CreateFile is Windows’ general-purpose file open API, used for reading existing files as much as creating new ones. Any SQL Server operation that opens a file handle can put time here, with the thread running preemptively (outside SQL Server’s scheduler)…
PREEMPTIVE_OS_DSGETDCNAME is recorded when a thread calls the Windows DsGetDcName function, which locates a domain controller for a given domain. It is the discovery step that precedes much authentication work: before validating a login or resolving an account, Windows must first find a DC to ask. Slowness here therefore front-runs slowness everywhere else in the…
Always On Availability Groups (4) Auditing (7) Backups (5) Blocking Locking (6) Collectors (7) Database Backups & Recovery (8) Database Backups and Recovery (5) Database Maintenance (7) DBA Tools (24) Disk Space (5) Extended Events (8) Features (6) High Availability (6) Indexes (7) Installation (7) Instance (3) Inventory (6) Jobs (3) Maintenance (6) Migration (13) Monitoring (24) Performance (21) Performance Troubleshooting (9) PowerShell (4) Queries (3) Query Behaviour (5) Security (7) SQL Agent (5) SQL Scripts (17) SQL Server Administration (10) SQL Server Configuration (7) SQL Server Errors (5) SQL Server High Availability (4) SQL Server Internals (3) SQL Server Management Studio (SSMS) (6) SQL Server Monitoring (7) SQL Server Networking (9) SQL Server Security (7) Storage and Capacity (7) T-SQL (9) Temp DB (3) Tracing (7) Transaction Logs (4) Troubleshooting (14) Windows Server (4)