Wait statistics are the single best first step in any SQL Server performance investigation. Every time a query waits on a resource, whether that’s a lock, disk I/O, a transaction log flush, a memory grant, or something else, SQL Server records it. By the time a performance problem appears, the evidence is usually already sitting in sys.dm_os_wait_stats. If you arrived here holding a specific wait type, jump straight to the Wait Type Finder : type the name, get the verdict.
First move: take a snapshot, wait five to ten minutes, take another, and diff them. Everything in sys.dm_os_wait_stats is cumulative since the last restart, and a month of uptime buries this morning’s problem under weeks of history; the interval is what tells you about now. On SQL Server 2017 and later, sys.query_store_wait_stats keeps per-query wait history with timestamps, which answers what a specific query was waiting on last Tuesday in a way the cumulative view never can.
Start With What The Server Is Short Of
Most waits are informational: filter them and move on. Thirteen actually drive real incidents, and each has a full, tool-backed troubleshooting workflow rather than a short reference entry. They are grouped below by what the server is running out of, because that is the decision the number leads to.
💾
Waiting on disk Reads and writes are the bottleneck, or the log is.
⚡
Waiting on CPU More runnable work than schedulers, or none left to run it.
🔒
Waiting on each other Sessions blocking, or all of them queueing on the same page.
🧠
Waiting on memory Queries queueing for a grant before they can even start.
📡
Waiting on something else The server is fine; the client or the network is not.
🔄
Waiting on a replica Commits held while a secondary catches up.
Why It Matters
Without wait statistics, a slow server is a black box. Is it the disk? Locking? CPU queue? Parallelism overhead? Memory pressure? Each of those requires a completely different fix, and the wrong diagnosis wastes hours.
Wait stats give you a ranked list of where time is being lost. If PAGEIOLATCH_SH is 60% of your total wait time, sessions are spending most of their time waiting on data-file reads: that is a symptom at the I/O boundary, and the cause behind it can be genuinely slow storage, a working set that stopped fitting in memory, or a plan change that started scanning. If WRITELOG dominates, commits are waiting on log flushes, which points at the log path: sometimes a slow log disk, just as often many tiny commits. If RESOURCE_SEMAPHORE appears, queries are queuing for memory grants. A wait names the boundary where time is lost, not the component at fault; it tells you where to investigate next, and the deep-dive pages below tell you what to check there.
The catch: SQL Server also records a lot of completely harmless waits, SLEEP_TASK, LAZYWRITER_SLEEP, BROKER_TO_FLUSH and others that represent SQL Server’s own background processes doing nothing. If you don’t filter these out, they dominate the output and hide the real signals.
The Script
WITH filtered_waits AS (
SELECT
wait_type,
waiting_tasks_count,
wait_time_ms,
max_wait_time_ms,
signal_wait_time_ms,
wait_time_ms - signal_wait_time_ms AS resource_wait_time_ms
FROM sys.dm_os_wait_stats
WHERE waiting_tasks_count > 0
AND wait_type NOT IN (
'SLEEP_TASK', 'SLEEP_SYSTEMTASK',
'SLEEP_TEMPDBSTARTUP', 'SLEEP_DBSTARTUP',
'SLEEP_DCOMSTARTUP', 'SLEEP_MASTERDBREADY',
'SLEEP_MASTERMDREADY', 'SLEEP_MASTERUPGRADED',
'SLEEP_MSDBSTARTUP', 'SNI_HTTP_ACCEPT',
'DISPATCHER_QUEUE_SEMAPHORE', 'BROKER_TO_FLUSH',
'BROKER_TASK_STOP', 'BROKER_EVENTHANDLER',
'BROKER_RECEIVE_WAITFOR', 'CHECKPOINT_QUEUE',
'DBMIRROR_EVENTS_QUEUE', 'DBMIRROR_WORKER_QUEUE',
'SQLTRACE_INCREMENTAL_FLUSH_SLEEP','SQLTRACE_BUFFER_FLUSH',
'SQLTRACE_WAIT_ENTRIES', 'WAITFOR',
'LAZYWRITER_SLEEP', 'LOGMGR_QUEUE',
'ONDEMAND_TASK_QUEUE', 'REQUEST_FOR_DEADLOCK_SEARCH',
'RESOURCE_QUEUE', 'SERVER_IDLE_CHECK',
'SP_SERVER_DIAGNOSTICS_SLEEP', 'WAIT_XTP_OFFLINE_CKPT_NEW_LOG',
'XE_DISPATCHER_WAIT', 'XE_TIMER_EVENT',
'HADR_WORK_QUEUE', 'HADR_FILESTREAM_IOMGR_IOCOMPLETION',
'HADR_CLUSAPI_CALL', 'HADR_NOTIFICATION_DEQUEUE',
'FT_IFTS_SCHEDULER_IDLE_WAIT', 'FT_IFTSHC_MUTEX',
'REPL_WORK_QUEUE', 'CLR_AUTO_EVENT',
'CLR_MANUAL_EVENT', 'WAIT_XTP_COMPILE_WAIT'
)
)
SELECT TOP 20
wait_type,
waiting_tasks_count,
wait_time_ms,
CAST(100.0 * wait_time_ms / NULLIF(SUM(wait_time_ms) OVER (), 0) AS DECIMAL(5,2)) AS pct_total_wait,
CAST(wait_time_ms / NULLIF(waiting_tasks_count, 0) AS DECIMAL(10,0)) AS avg_wait_ms,
max_wait_time_ms,
signal_wait_time_ms,
resource_wait_time_ms
FROM filtered_waits
ORDER BY wait_time_ms DESC;
The script removes the common idle and background waits so that the output focuses on waits that are more likely to indicate a real performance bottleneck.
How To Run It
# Table output - quick triage view
.\run.ps1 Get-WaitStatistics
# Save to CSV for comparison over time
.\run.ps1 Get-WaitStatistics -OutputFormat Csv
# Against a named instance
.\run.ps1 Get-WaitStatistics -ServerInstance MYSERVER\INST01 -OutputFormat Csv
Reading The Output
Column What It Means wait_typeName of the wait. The SQL Server documentation has a full list. waiting_tasks_countHow many tasks have waited on this type since the last restart wait_time_msTotal cumulative wait time in milliseconds since last restart pct_total_waitThis wait type’s share of all non-idle wait time. The most useful column for ranking. avg_wait_msAverage wait time per occurrence, helps distinguish frequent short waits from rare long ones max_wait_time_msLongest single wait ever recorded for this type signal_wait_time_msTime spent waiting for a CPU scheduler slot after the resource became available. High values here indicate CPU pressure. resource_wait_time_msTime waiting for the actual resource (I/O, lock, memory, etc.)
The pct_total_wait column is the one to sort by mentally. The top two or three wait types that together account for 60–80% of total wait time are your investigation targets. Treat the 60–80% figure as the usual shape, not a rule; the signal is that a few wait types dominate, whatever the exact split.
Production Notes
PAGEIOLATCH_SH / PAGEIOLATCH_EX Data page I/O. The query needed a page from disk and had to wait for it to load. Usually either the buffer pool is too small for the working set, or the storage is slow.
WRITELOG Transaction log write waits. Every commit waits for its log records to be written. Dominates when the log disk is slow, or when the workload is many small transactions.
RESOURCE_SEMAPHORE Memory grant waits. Queries that sort or hash large sets need a reservation first, and queue here when memory is short. Often traced back to a missing index causing the large sort.
CXPACKET / CXCONSUMER Parallelism coordination. Some is normal. High values suggest MAXDOP is too high, or the cost threshold is low enough that trivial queries are going parallel.
LCK_M_X / LCK_M_S Lock waits, exclusive and shared. High values mean blocking is happening regularly, and the blocking scripts are the next stop.
ASYNC_NETWORK_IO Client network waits. SQL Server produced results faster than the application consumed them. Usually an application-layer problem rather than a server one.
💡 Compare the two time columns When signal_wait_time_ms is large relative to resource_wait_time_ms, queries got the resource they asked for and then waited for CPU. That points at CPU saturation or worker thread contention, not at the resource.
✅ What healthy actually looks like A healthy server shows a mixture of waits rather than one dominant type. Small amounts of CXPACKET, CXCONSUMER and occasional PAGEIOLATCH_* are normal. When a single wait consistently accounts for 40% or more of total wait time, that is where to begin.
Important: These Are Cumulative Since Last Restart
sys.dm_os_wait_stats accumulates from the moment SQL Server started. On a server that’s been up for 6 months, today’s problem might be buried under months of historical data. If you’re investigating a specific incident, compare two snapshots taken before and after the problem window, or use a baseline snapshot tool.
This library is also served to AI assistants through the sqldba MCP server . Its explain_wait tool returns the verdict and the write-up link for a wait type, and says plainly when a type is not covered rather than inventing an explanation for it.
Related Scripts
Get The Scripts
The full script is available in the dba-tools repo on GitHub :
The Library, A to Z
Every documented SQL Server wait type, searchable. Paste the name you are seeing in your own output, or filter by whether it is worth your time. Family pages cover related waits together; the thirteen that drive real incidents have full troubleshooting guides.
AM_INDBUILD_ALLOCATION AM_INDBUILD_ALLOCATION waits cover extent allocation during index builds; AM_SCHEMAMGR_UNSHA… Usually noise AM_SCHEMAMGR_UNSHARED_CACHE AM_INDBUILD_ALLOCATION waits cover extent allocation during index builds; AM_SCHEMAMGR_UNSHA… Usually noise ASSEMBLY_FILTER_HASHTABLE ASSEMBLY_LOAD, ASSEMBLY_FILTER_HASHTABLE, CLR_CRST and CLR_TASK_START waits cover CLR assemb… Usually noise ASSEMBLY_LOAD ASSEMBLY_LOAD, ASSEMBLY_FILTER_HASHTABLE, CLR_CRST and CLR_TASK_START waits cover CLR assemb… Usually noise ASYNC_DISKPOOL_LOCK ASYNC_DISKPOOL_LOCK waits are threads coordinating long file operations like creating, zeroi… Usually noise ASYNC_IO_COMPLETION ASYNC_IO_COMPLETION waits indicate asynchronous file operations are taking time to complete… Worth investigating ASYNC_NETWORK_IO Client not consuming results fast enough (pillar) Pillar guide BACKUP BACKUP waits are backup threads synchronizing with each other during backup processing. Usually noise BACKUPBUFFER Backup buffer waits (pillar) Pillar guide BACKUPIO Backup I/O throughput (pillar) Pillar guide BACKUPTHREAD BACKUPTHREAD waits are backup workers waiting for other threads during backup or restore. Usually noise BAD_PAGE_PROCESS BAD_PAGE_PROCESS waits come from the suspect page logger. Worth investigating BMPALLOCATION BMPALLOCATION waits relate to bitmap allocation in parallel query plans. Usually noise BPSORT BPSORT waits are threads coordinating batch-mode sorts. Worth investigating BROKER_CONNECTION_RECEIVE_TASK BROKER_INIT, BROKER_MASTERSTART, BROKER_SERVICE, BROKER_SHUTDOWN and related startup and end… Usually noise BROKER_ENDPOINT_STATE_MUTEX BROKER_INIT, BROKER_MASTERSTART, BROKER_SERVICE, BROKER_SHUTDOWN and related startup and end… Usually noise BROKER_EVENTHANDLER BROKER_EVENTHANDLER waits are the per-instance Service Broker event handler idling; its tota… Usually noise BROKER_INIT BROKER_INIT, BROKER_MASTERSTART, BROKER_SERVICE, BROKER_SHUTDOWN and related startup and end… Usually noise BROKER_MASTERSTART BROKER_INIT, BROKER_MASTERSTART, BROKER_SERVICE, BROKER_SHUTDOWN and related startup and end… Usually noise BROKER_RECEIVE_WAITFOR BROKER_RECEIVE_WAITFOR waits are sessions blocked on RECEIVE WAITFOR against an empty Servic… Usually noise BROKER_REGISTERALLENDPOINTS BROKER_INIT, BROKER_MASTERSTART, BROKER_SERVICE, BROKER_SHUTDOWN and related startup and end… Usually noise BROKER_SERVICE BROKER_INIT, BROKER_MASTERSTART, BROKER_SERVICE, BROKER_SHUTDOWN and related startup and end… Usually noise BROKER_SHUTDOWN BROKER_INIT, BROKER_MASTERSTART, BROKER_SERVICE, BROKER_SHUTDOWN and related startup and end… Usually noise BROKER_TASK_STOP BROKER_TASK_STOP waits are Service Broker task handlers waiting up to ten seconds to shut do… Usually noise BROKER_TO_FLUSH BROKER_TO_FLUSH waits are the Service Broker lazy flusher idling, ticking one second per sec… Usually noise BROKER_TRANSMISSION_TABLE BROKER_TRANSMISSION_TABLE waits cover writing inactive Service Broker transmission objects t… Usually noise BROKER_TRANSMISSION_WORK BROKER_TRANSMISSION_WORK waits relate to Service Broker transmission work availability, simi… Usually noise BROKER_TRANSMITTER BROKER_TRANSMITTER waits are the two Service Broker transmitter threads idling on an empty t… Usually noise CHECKPOINT_QUEUE CHECKPOINT_QUEUE waits are the background checkpoint process idling between requests. Usually noise CHECK_TABLES_INITIALIZATION CHECK_TABLES_INITIALIZATION waits are parallel DBCC CHECKDB threads taking turns through an… Usually noise CHECK_TABLES_THREAD_BARRIER CHECK_TABLES_THREAD_BARRIER waits are parallel DBCC threads waiting at sync barriers. Worth investigating CHKPT CHKPT waits occur once at instance startup while the background checkpoint process waits for… Usually noise CLR_AUTO_EVENT CLR_AUTO_EVENT waits are CLR worker threads waiting on auto-reset events, normally just idle… Usually noise CLR_CRST ASSEMBLY_LOAD, ASSEMBLY_FILTER_HASHTABLE, CLR_CRST and CLR_TASK_START waits cover CLR assemb… Usually noise CLR_MANUAL_EVENT CLR_MANUAL_EVENT waits are CLR worker threads waiting on manual-reset events, normally idle… Usually noise CLR_SEMAPHORE CLR_SEMAPHORE waits are CLR tasks waiting on a semaphore. Worth investigating CLR_TASK_START ASSEMBLY_LOAD, ASSEMBLY_FILTER_HASHTABLE, CLR_CRST and CLR_TASK_START waits cover CLR assemb… Usually noise CMEMPARTITIONED CMEMPARTITIONED waits are contention on a partitioned memory object, the structure designed… Usually noise CMEMTHREAD CMEMTHREAD waits show contention on shared memory objects under high concurrency, often hot… Worth investigating COLUMNSTORE_BUILD_THROTTLE COLUMNSTORE_BUILD_THROTTLE waits are parallel columnstore build threads waiting while the fi… Worth investigating COMMIT_TABLE COMMIT_TABLE waits are contention on the hidden commit table behind Change Tracking. Worth investigating CXCONSUMER Parallelism consumer-side coordination (pillar) Pillar guide CXPACKET Parallelism coordination, MAXDOP and cost threshold (pillar) Pillar guide CXROWSET_SYNC CXROWSET_SYNC waits happen when parallel scan threads coordinate access to the shared parent… Usually noise CXSYNC_CONSUMER CXSYNC_CONSUMER waits are consumer threads at parallel exchange sync points, split out of CX… Worth investigating CXSYNC_PORT CXSYNC_PORT waits track opening, closing, and syncing exchange ports between parallel produc… Worth investigating DAC_INIT DAC_INIT waits occur while the Dedicated Admin Connection listener initializes at startup. Usually noise DBMIRRORING_CMD DBMIRRORING_CMD waits cover mirroring configuration, state changes, and log flush waits. Worth investigating DBMIRROR_DBM_MUTEX DBMIRROR_DBM_MUTEX waits occur on a database mirror while parallel threads replay log records. Usually noise DBMIRROR_EVENTS_QUEUE DBMIRROR_EVENTS_QUEUE waits are the main database mirroring thread waiting for events. Usually noise DBMIRROR_SEND DBMIRROR_SEND waits mean database mirroring cannot push log over the network fast enough, sl… Worth investigating DBMIRROR_WORKER_QUEUE DBMIRROR_WORKER_QUEUE waits are database mirroring worker tasks waiting for more work. Usually noise DEADLOCK_ENUM_MUTEX DEADLOCK_ENUM_MUTEX waits synchronize the deadlock monitor with sys.dm_os_waiting_tasks so o… Usually noise DIRTY_PAGE_POLL DIRTY_PAGE_POLL waits are the indirect checkpoint background task sleeping between polls for… Usually noise DIRTY_PAGE_TABLE_LOCK DIRTY_PAGE_TABLE_LOCK waits are redo and read threads contending on the dirty page list of a… Worth investigating DISKIO_SUSPEND DISKIO_SUSPEND waits mean database I/O is frozen for an external snapshot backup and session… Worth investigating DISPATCHER_QUEUE_SEMAPHORE DISPATCHER_QUEUE_SEMAPHORE waits are dispatcher pool threads waiting for work, used by backu… Usually noise DPT_ENTRY_LOCK DPT_ENTRY_LOCK waits are AG secondary redo and read threads contending on the same dirty pag… Worth investigating DROPTEMP DROPTEMP waits are exponential back-off retries after a failed temp table drop, usually foll… Worth investigating DUMP_LOG_COORDINATOR DUMP_LOG_COORDINATOR and its queue variant occur while fn_dump_dblog reads log records from… Usually noise DUMP_LOG_COORDINATOR_QUEUE DUMP_LOG_COORDINATOR and its queue variant occur while fn_dump_dblog reads log records from… Usually noise EC EC waits mean pages are being read from a Buffer Pool Extension file. Worth investigating EE_PMOLOCK EE_PMOLOCK waits are threads synchronizing on a memory object used during statement execution. Worth investigating EXCHANGE EXCHANGE waits occur inside the parallelism exchange iterator during parallel queries. Worth investigating EXECSYNC EXECSYNC waits occur when parallel threads wait for a single thread to build a shared constr… Usually noise FCB_REPLICA_READ FCB_REPLICA_READ and FCB_REPLICA_WRITE waits synchronize reads and writes of database snapsh… Usually noise FCB_REPLICA_WRITE FCB_REPLICA_READ and FCB_REPLICA_WRITE waits synchronize reads and writes of database snapsh… Usually noise FFT_NSO_DB_LIST FFT_NSO_DB_LIST and FFT_RECOVERY waits belong to the FileTable subsystem, covering its datab… Usually noise FFT_RECOVERY FFT_NSO_DB_LIST and FFT_RECOVERY waits belong to the FileTable subsystem, covering its datab… Usually noise FGCB_ADD_REMOVE FGCB_ADD_REMOVE waits mean sessions are queuing behind data file growth events. Worth investigating FT_IFTSHC_MUTEX FT_IFTSHC_MUTEX and FT_IFTS_RWLOCK waits are full-text search worker synchronization, includ… Usually noise FT_IFTS_RWLOCK FT_IFTSHC_MUTEX and FT_IFTS_RWLOCK waits are full-text search worker synchronization, includ… Usually noise FT_IFTS_SCHEDULER_IDLE_WAIT FT_IFTS_SCHEDULER_IDLE_WAIT waits are the full-text search scheduler idling with no work que… Usually noise FT_MASTER_MERGE FT_MASTER_MERGE waits are threads in a full-text master merge waiting on each other. Usually noise HADR_AG_MUTEX HADR_AG_MUTEX waits are threads queuing for exclusive access to an Availability Group's conf… Usually noise HADR_ARCONTROLLER_NOTIFICATIONS_SUBSCRIBER_LIST HADR_ARCONTROLLER_NOTIFICATIONS_SUBSCRIBER_LIST and HADR_FILESTREAM_IOMGR waits are AG inter… Usually noise HADR_CLUSAPI_CALL HADR_CLUSAPI_CALL waits are threads calling Windows Failover Cluster APIs for Availability G… Worth investigating HADR_DATABASE_FLOW_CONTROL HADR_DATABASE_FLOW_CONTROL waits mean an Availability Group is throttling log send because t… Worth investigating HADR_FILESTREAM_IOMGR HADR_ARCONTROLLER_NOTIFICATIONS_SUBSCRIBER_LIST and HADR_FILESTREAM_IOMGR waits are AG inter… Usually noise HADR_FILESTREAM_IOMGR_IOCOMPLETION HADR_FILESTREAM_IOMGR_IOCOMPLETION waits are a FILESTREAM AG timer ticking every half second… Usually noise HADR_GROUP_COMMIT HADR_GROUP_COMMIT waits are Availability Group commits batching into shared log blocks. Worth investigating HADR_LOGCAPTURE_WAIT HADR_LOGCAPTURE_WAIT means an Availability Group log capture thread is waiting for new log t… Usually noise HADR_LOGPROGRESS_SYNC HADR_LOGPROGRESS_SYNC waits guard the log-harden LSN structure that releases synchronous AG… Worth investigating HADR_NOTIFICATION_DEQUEUE HADR_NOTIFICATION_DEQUEUE waits are a background task waiting for the next Windows cluster n… Usually noise HADR_SEEDING_LIMIT_BACKUPS HADR_SEEDING_LIMIT_BACKUPS waits appear during Availability Group automatic seeding, often w… Worth investigating HADR_SYNC_COMMIT AG synchronous commit latency (pillar) Pillar guide HADR_TIMER_TASK HADR_TIMER_TASK waits cover Availability Group timer scheduling, including the waits between… Usually noise HADR_WORK_POOL HADR_WORK_POOL waits are threads synchronizing on the Availability Group background work tas… Usually noise HADR_WORK_QUEUE HADR_WORK_QUEUE waits are Availability Group background workers waiting for work to be assig… Usually noise HP_SPOOL_BARRIER HP_SPOOL_BARRIER waits came from a flawed parallel spool bug fix, added and removed across v… Worth investigating HTBUILD HTBUILD waits are threads synchronizing while building a shared batch-mode hash table. Worth investigating HTDELETE HTDELETE waits are threads synchronizing at the end of a batch-mode hash join. Worth investigating HTMEMO HTMEMO waits are batch-mode threads synchronizing before scanning the shared hash table to o… Worth investigating HTREINIT HTREINIT waits are batch-mode threads synchronizing before resetting a hash join for the nex… Worth investigating HTREPARTITION HTREPARTITION waits are batch-mode threads synchronizing while repartitioning a shared hash… Worth investigating IMPPROV_IOWAIT IMPPROV_IOWAIT waits are bulk load operations waiting on reads from the source file. Worth investigating IO_COMPLETION Non-data-page I/O: spills, backups, DBCC (pillar) Pillar guide IO_QUEUE_LIMIT IO_QUEUE_LIMIT waits mean a session's asynchronous I/O queue is full and new I/O is throttle… Worth investigating KSOURCE_WAKEUP KSOURCE_WAKEUP waits are the service control task waiting for Service Control Manager reques… Usually noise LATCH_DT LATCH_DT waits are for a destroy-mode latch on a non-page structure. Usually noise LATCH_EX LATCH_EX waits are contention on a non-page latch. Worth investigating LATCH_KP LATCH_KP waits are keep-mode latches on non-page structures, pinning them without blocking r… Usually noise LATCH_NL LATCH_NL waits are the null latch mode, present for completeness and essentially never used. Usually noise LATCH_SH LATCH_SH waits are shared-latch contention on an internal non-page structure. Usually noise LATCH_UP LATCH_UP waits are update-mode latches on internal non-page structures. Usually noise LAZYWRITER_SLEEP LAZYWRITER_SLEEP waits are the lazy writer sleeping between buffer pool checks, one second a… Usually noise LCK_M_BU_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_BU_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_IS LCK_M_IS waits mean a reader cannot get an Intent Shared lock, usually because an exclusive… Worth investigating LCK_M_IS_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_IS_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_IU_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_IU_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_IX LCK_M_IX waits mean a writer cannot get an Intent Exclusive lock on a table or page, usually… Worth investigating LCK_M_IX_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_IX_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RIN_NL LCK_M_RIn_NL waits are blocked insert-range key locks under SERIALIZABLE isolation, typicall… Worth investigating LCK_M_RIN_NL_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RIN_NL_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RIN_S_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RIN_S_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RIN_U_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RIN_U_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RIN_X_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RIN_X_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RS_S LCK_M_RS_S waits are blocked shared range locks from SERIALIZABLE isolation, often introduce… Worth investigating LCK_M_RS_S_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RS_S_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RS_U LCK_M_RS_U waits are blocked update-range key locks under SERIALIZABLE isolation, typical of… Worth investigating LCK_M_RS_U_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RS_U_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RX_S_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RX_S_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RX_U_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RX_U_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RX_X LCK_M_RX_X waits are blocked exclusive range locks under SERIALIZABLE isolation, a common de… Worth investigating LCK_M_RX_X_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_RX_X_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_S Shared lock blocking (pillar) Pillar guide LCK_M_SCH_M LCK_M_SCH_M waits mean DDL is stuck waiting for a Schema Modification lock, usually behind l… Worth investigating LCK_M_SCH_M_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_SCH_M_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_SCH_S LCK_M_SCH_S waits mean queries cannot even compile because DDL holds a schema modification l… Worth investigating LCK_M_SCH_S_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_SCH_S_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_SIU_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_SIU_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_SIX LCK_M_SIX waits mean a session needs a Shared With Intent Exclusive lock, a scan-then-update… Worth investigating LCK_M_SIX_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_SIX_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_S_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_S_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_U Update lock blocking (pillar) Pillar guide LCK_M_UIX_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_UIX_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_U_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_U_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_X Exclusive lock blocking (pillar) Pillar guide LCK_M_X_ABORT_BLOCKERS WAIT_AT_LOW_PRIORITY online index option Worth investigating LCK_M_X_LOW_PRIORITY WAIT_AT_LOW_PRIORITY online index option Worth investigating LOGBUFFER LOGBUFFER waits point to pressure in log buffer handling before flush, often from very high… Worth investigating LOGMGR LOGMGR waits occur while a database waits for outstanding log I/O to finish before closing. Usually noise LOGMGR_FLUSH LOGMGR_FLUSH waits mean a thread generating log records is waiting for the current log flush… Usually noise LOGMGR_QUEUE LOGMGR_QUEUE waits are the log writer threads waiting for work. Usually noise LOGMGR_RESERVE_APPEND LOGMGR_RESERVE_APPEND waits mean the transaction log is full and threads wait for truncation… Worth investigating LOGPOOL_CACHESIZE LOGPOOL_CACHESIZE, CONSUMER, CONSUMERSET, FREEPOOLS and REPLACEMENTSET waits cover the log p… Usually noise LOGPOOL_CONSUMER LOGPOOL_CACHESIZE, CONSUMER, CONSUMERSET, FREEPOOLS and REPLACEMENTSET waits cover the log p… Usually noise LOGPOOL_CONSUMERSET LOGPOOL_CACHESIZE, CONSUMER, CONSUMERSET, FREEPOOLS and REPLACEMENTSET waits cover the log p… Usually noise LOGPOOL_FREEPOOLS LOGPOOL_CACHESIZE, CONSUMER, CONSUMERSET, FREEPOOLS and REPLACEMENTSET waits cover the log p… Usually noise LOGPOOL_REPLACEMENTSET LOGPOOL_CACHESIZE, CONSUMER, CONSUMERSET, FREEPOOLS and REPLACEMENTSET waits cover the log p… Usually noise MEMORY_ALLOCATION_EXT MEMORY_ALLOCATION_EXT waits are threads switching to preemptive mode to allocate memory. Usually noise METADATA_LAZYCACHE_RWLOCK METADATA_LAZYCACHE_RWLOCK waits guard lazily-populated metadata caches; replaced by MD_LAZYC… Usually noise MSQL_DQ MSQL_DQ waits mean a task is waiting for a distributed query against a linked server to finish. Worth investigating MSQL_XP MSQL_XP waits measure time inside extended stored procedures. Worth investigating OLEDB OLEDB waits mean a worker is blocked on an OLE DB provider call, often linked servers or DBC… Worth investigating ONDEMAND_TASK_QUEUE ONDEMAND_TASK_QUEUE waits are a background task waiting for high-priority system requests li… Usually noise PAGEIOLATCH_DT PAGEIOLATCH_DT waits are destroy-mode buffer latches during I/O. Usually noise PAGEIOLATCH_EX Data page write I/O (pillar) Pillar guide PAGEIOLATCH_KP PAGEIOLATCH_KP waits are keep-mode latches on pages in I/O requests. Worth investigating PAGEIOLATCH_NL PAGEIOLATCH_NL is the null mode of the I/O page latch family, unused in practice. Usually noise PAGEIOLATCH_SH Data page read I/O, buffer pool pressure or slow storage (pillar) Pillar guide PAGEIOLATCH_UP PAGEIOLATCH_UP waits mean a thread is reading an allocation bitmap page from disk before upd… Worth investigating PAGELATCH_DT PAGELATCH_DT waits are destroy-mode latches on in-memory pages, present for mode completenes… Usually noise PAGELATCH_EX In-memory page latch, tempdb allocation contention (pillar) Pillar guide PAGELATCH_KP PAGELATCH_KP waits are keep-mode latches pinning in-memory pages against destruction. Usually noise PAGELATCH_NL PAGELATCH_NL is the null page latch mode, present for completeness and not used in practice. Usually noise PAGELATCH_SH PAGELATCH_SH waits mean threads are queuing for a shared latch on an in-memory page, usually… Worth investigating PAGELATCH_UP PAGELATCH_UP waits are update-mode latches on in-memory pages, classically PFS and SGAM cont… Worth investigating PARALLEL_BACKUP_QUEUE PARALLEL_BACKUP_QUEUE waits occur while parallel restore threads serialize output for RESTOR… Usually noise PARALLEL_REDO_DRAIN_WORKER PARALLEL_REDO_DRAIN_WORKER waits are the main redo thread draining outstanding work at sync… Usually noise PARALLEL_REDO_FLOW_CONTROL PARALLEL_REDO_FLOW_CONTROL waits mean the main AG redo thread is waiting for parallel redo w… Worth investigating PARALLEL_REDO_LOG_CACHE PARALLEL_REDO_LOG_CACHE waits occur occasionally after redo flow-control bottlenecks on AG r… Usually noise PARALLEL_REDO_TRAN_LIST PARALLEL_REDO_TRAN_LIST waits are the main redo thread accessing the list of transactions be… Usually noise PARALLEL_REDO_TRAN_TURN PARALLEL_REDO_TRAN_TURN waits are redo threads forced to apply log records in order. Worth investigating PARALLEL_REDO_WORKER_SYNC PARALLEL_REDO_WORKER_SYNC waits are the main AG redo thread waiting for its worker threads t… Usually noise PARALLEL_REDO_WORKER_WAIT_WORK PARALLEL_REDO_WORKER_WAIT_WORK waits are AG parallel redo workers idling with nothing to rep… Usually noise PERFORMANCE_COUNTERS_RWLOCK PERFORMANCE_COUNTERS_RWLOCK waits synchronize adding and removing performance counter instan… Usually noise PREEMPTIVE_CLUSAPI_CLUSTERRESOURCECONTROL PREEMPTIVE_OS_CLUSTEROPS and PREEMPTIVE_CLUSAPI_CLUSTERRESOURCECONTROL waits track Windows c… Worth investigating PREEMPTIVE_COM_COCREATEINSTANCE PREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects… Worth investigating PREEMPTIVE_COM_CREATEACCESSOR PREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects… Worth investigating PREEMPTIVE_COM_GETDATA PREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects… Worth investigating PREEMPTIVE_COM_QUERYINTERFACE PREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects… Worth investigating PREEMPTIVE_COM_RELEASEACCESSOR PREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects… Worth investigating PREEMPTIVE_COM_RELEASEROWS PREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects… Worth investigating PREEMPTIVE_COM_SEQSTRMREAD PREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects… Worth investigating PREEMPTIVE_CREATEPARAM PREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects… Worth investigating PREEMPTIVE_DTC_ABORTREQUESTDONE PREEMPTIVE_DTC_BEGINTRANSACTION, ENLIST, ABORTREQUESTDONE and OS_DTCOPS waits track MSDTC ca… Worth investigating PREEMPTIVE_DTC_BEGINTRANSACTION PREEMPTIVE_DTC_BEGINTRANSACTION, ENLIST, ABORTREQUESTDONE and OS_DTCOPS waits track MSDTC ca… Worth investigating PREEMPTIVE_DTC_ENLIST PREEMPTIVE_DTC_BEGINTRANSACTION, ENLIST, ABORTREQUESTDONE and OS_DTCOPS waits track MSDTC ca… Worth investigating PREEMPTIVE_FILESIZEGET PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_FSRECOVER_UNCONDITIONALUNDO PREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp… Worth investigating PREEMPTIVE_HADR_LEASE_MECHANISM PREEMPTIVE_HADR_LEASE_MECHANISM waits track AG lease renewal after a lease timeout. Worth investigating PREEMPTIVE_OLEDBOPS PREEMPTIVE_OLEDBOPS waits are threads in preemptive mode talking to OLE DB providers, the li… Usually noise PREEMPTIVE_OLEDB_SETPROPERTIES PREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects… Worth investigating PREEMPTIVE_OS_ACCEPTSECURITYCONTEXT PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_ACQUIRECREDENTIALSHANDLE PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_AUTHENTICATIONOPS PREEMPTIVE_OS_AUTHENTICATIONOPS waits track Windows authentication calls. Worth investigating PREEMPTIVE_OS_AUTHORIZATIONOPS PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_AUTHZGETINFORMATIONFROMCONTEXT PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_AUTHZINITIALIZECONTEXTFROMSID PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_AUTHZINITIALIZERESOURCEMANAGER PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_BACKUPREAD PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_BCRYPTIMPORTKEY PREEMPTIVE_OS_CRYPTOPS, CRYPTIMPORTKEY, VERIFYTRUST and related waits track Windows crypto A… Usually noise PREEMPTIVE_OS_CLOSEHANDLE PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_CLUSTEROPS PREEMPTIVE_OS_CLUSTEROPS and PREEMPTIVE_CLUSAPI_CLUSTERRESOURCECONTROL waits track Windows c… Worth investigating PREEMPTIVE_OS_COMOPS PREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp… Worth investigating PREEMPTIVE_OS_COMPLETEAUTHTOKEN PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_COPYFILE PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_CREATEDIRECTORY PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_CREATEFILE PREEMPTIVE_OS_CREATEFILE waits are Windows CreateFile calls, opening as well as creating files. Worth investigating PREEMPTIVE_OS_CRYPTACQUIRECONTEXT PREEMPTIVE_OS_CRYPTOPS, CRYPTIMPORTKEY, VERIFYTRUST and related waits track Windows crypto A… Usually noise PREEMPTIVE_OS_CRYPTIMPORTKEY PREEMPTIVE_OS_CRYPTOPS, CRYPTIMPORTKEY, VERIFYTRUST and related waits track Windows crypto A… Usually noise PREEMPTIVE_OS_CRYPTOPS PREEMPTIVE_OS_CRYPTOPS, CRYPTIMPORTKEY, VERIFYTRUST and related waits track Windows crypto A… Usually noise PREEMPTIVE_OS_DECRYPTMESSAGE PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_DELETEFILE PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_DELETESECURITYCONTEXT PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_DEVICEIOCONTROL PREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp… Worth investigating PREEMPTIVE_OS_DEVICEOPS PREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp… Worth investigating PREEMPTIVE_OS_DIRSVC_NETWORKOPS PREEMPTIVE_OS_NETGROUPGETUSERS, NETUSERGETGROUPS and related waits track AD group membership… Worth investigating PREEMPTIVE_OS_DISCONNECTNAMEDPIPE PREEMPTIVE_OS_GETADDRINFO, WINSOCKOPS, DISCONNECTNAMEDPIPE and MESSAGEQUEUEOPS waits track n… Worth investigating PREEMPTIVE_OS_DOMAINSERVICESOPS PREEMPTIVE_OS_NETGROUPGETUSERS, NETUSERGETGROUPS and related waits track AD group membership… Worth investigating PREEMPTIVE_OS_DSGETDCNAME PREEMPTIVE_OS_DSGETDCNAME waits are Windows DsGetDcName calls locating a domain controller. Worth investigating PREEMPTIVE_OS_DTCOPS PREEMPTIVE_DTC_BEGINTRANSACTION, ENLIST, ABORTREQUESTDONE and OS_DTCOPS waits track MSDTC ca… Worth investigating PREEMPTIVE_OS_ENCRYPTMESSAGE PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_FILEOPS PREEMPTIVE_OS_FILEOPS waits are generic Windows file system calls made outside SQL Server sc… Worth investigating PREEMPTIVE_OS_FINDFILE PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_FLUSHFILEBUFFERS PREEMPTIVE_OS_FLUSHFILEBUFFERS waits are FlushFileBuffers calls forcing writes to durable me… Worth investigating PREEMPTIVE_OS_FORMATMESSAGE PREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp… Worth investigating PREEMPTIVE_OS_FREECREDENTIALSHANDLE PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_FREELIBRARY PREEMPTIVE_OS_LOADLIBRARY, FREELIBRARY and LIBRARYOPS waits track DLL load and unload calls… Usually noise PREEMPTIVE_OS_GENERICOPS PREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp… Worth investigating PREEMPTIVE_OS_GETADDRINFO PREEMPTIVE_OS_GETADDRINFO, WINSOCKOPS, DISCONNECTNAMEDPIPE and MESSAGEQUEUEOPS waits track n… Worth investigating PREEMPTIVE_OS_GETCOMPRESSEDFILESIZE PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_GETDISKFREESPACE PREEMPTIVE_OS_GETDISKFREESPACE waits are Windows GetDiskFreeSpace calls checking volume spac… Usually noise PREEMPTIVE_OS_GETFILEATTRIBUTES PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_GETFILESIZE PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_GETFINALFILEPATHBYHANDLE PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_GETLONGPATHNAME PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_GETPROCADDRESS PREEMPTIVE_OS_GETPROCADDRESS waits track resolving extended stored procedure addresses in DL… Worth investigating PREEMPTIVE_OS_GETVOLUMENAMEFORVOLUMEMOUNTPOINT PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_GETVOLUMEPATHNAME PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_INITIALIZESECURITYCONTEXT PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_LIBRARYOPS PREEMPTIVE_OS_LOADLIBRARY, FREELIBRARY and LIBRARYOPS waits track DLL load and unload calls… Usually noise PREEMPTIVE_OS_LOADLIBRARY PREEMPTIVE_OS_LOADLIBRARY, FREELIBRARY and LIBRARYOPS waits track DLL load and unload calls… Usually noise PREEMPTIVE_OS_LOGONUSER PREEMPTIVE_OS_LOGONUSER waits are Windows LogonUser calls, common with proxies and linked se… Usually noise PREEMPTIVE_OS_LOOKUPACCOUNTSID PREEMPTIVE_OS_LOOKUPACCOUNTSID waits are Windows SID-to-name lookups, often hitting domain c… Worth investigating PREEMPTIVE_OS_MESSAGEQUEUEOPS PREEMPTIVE_OS_GETADDRINFO, WINSOCKOPS, DISCONNECTNAMEDPIPE and MESSAGEQUEUEOPS waits track n… Worth investigating PREEMPTIVE_OS_MOVEFILE PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_NCRYPTIMPORTKEY PREEMPTIVE_OS_CRYPTOPS, CRYPTIMPORTKEY, VERIFYTRUST and related waits track Windows crypto A… Usually noise PREEMPTIVE_OS_NETGROUPGETUSERS PREEMPTIVE_OS_NETGROUPGETUSERS, NETUSERGETGROUPS and related waits track AD group membership… Worth investigating PREEMPTIVE_OS_NETLOCALGROUPGETMEMBERS PREEMPTIVE_OS_NETGROUPGETUSERS, NETUSERGETGROUPS and related waits track AD group membership… Worth investigating PREEMPTIVE_OS_NETUSERGETGROUPS PREEMPTIVE_OS_NETGROUPGETUSERS, NETUSERGETGROUPS and related waits track AD group membership… Worth investigating PREEMPTIVE_OS_NETUSERGETLOCALGROUPS PREEMPTIVE_OS_NETGROUPGETUSERS, NETUSERGETGROUPS and related waits track AD group membership… Worth investigating PREEMPTIVE_OS_NETUSERMODALSGET PREEMPTIVE_OS_NETGROUPGETUSERS, NETUSERGETGROUPS and related waits track AD group membership… Worth investigating PREEMPTIVE_OS_NETVALIDATEPASSWORDPOLICY PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_NETVALIDATEPASSWORDPOLICYFREE PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_OPENDIRECTORY PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_PDH_WMI_INIT PREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp… Worth investigating PREEMPTIVE_OS_PIPEOPS PREEMPTIVE_OS_PIPEOPS waits track Windows pipe operations, almost always xp_cmdshell. Worth investigating PREEMPTIVE_OS_PROCESSOPS PREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp… Worth investigating PREEMPTIVE_OS_QUERYCONTEXTATTRIBUTES PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_QUERYREGISTRY PREEMPTIVE_OS_QUERYREGISTRY waits are Windows registry calls. Worth investigating PREEMPTIVE_OS_QUERYSECURITYCONTEXTTOKEN PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_REMOVEDIRECTORY PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_REPORTEVENT PREEMPTIVE_OS_REPORTEVENT waits are Windows ReportEvent calls writing to the event log. Worth investigating PREEMPTIVE_OS_REVERTTOSELF PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_RSFXDEVICEOPS PREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp… Worth investigating PREEMPTIVE_OS_SECURITYOPS PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_SERVICEOPS PREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp… Worth investigating PREEMPTIVE_OS_SETENDOFFILE PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_SETFILEPOINTER PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_SETFILEVALIDDATA PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_SETNAMEDSECURITYINFO PREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo… Worth investigating PREEMPTIVE_OS_SQMLAUNCH PREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp… Worth investigating PREEMPTIVE_OS_VERIFYSIGNATURE PREEMPTIVE_OS_CRYPTOPS, CRYPTIMPORTKEY, VERIFYTRUST and related waits track Windows crypto A… Usually noise PREEMPTIVE_OS_VERIFYTRUST PREEMPTIVE_OS_CRYPTOPS, CRYPTIMPORTKEY, VERIFYTRUST and related waits track Windows crypto A… Usually noise PREEMPTIVE_OS_VSSOPS PREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp… Worth investigating PREEMPTIVE_OS_WAITFORSINGLEOBJECT PREEMPTIVE_OS_WAITFORSINGLEOBJECT waits are threads synchronizing with external client proce… Worth investigating PREEMPTIVE_OS_WINSOCKOPS PREEMPTIVE_OS_GETADDRINFO, WINSOCKOPS, DISCONNECTNAMEDPIPE and MESSAGEQUEUEOPS waits track n… Worth investigating PREEMPTIVE_OS_WRITEFILE PREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s… Worth investigating PREEMPTIVE_OS_WRITEFILEGATHER PREEMPTIVE_OS_WRITEFILEGATHER waits usually mean file growth is zero-filling new space. Worth investigating PREEMPTIVE_OS_WSASETLASTERROR PREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp… Worth investigating PREEMPTIVE_SB_STOPENDPOINT PREEMPTIVE_SB_STOPENDPOINT waits are threads calling Windows while shutting down a Service B… Usually noise PREEMPTIVE_SP_SERVER_DIAGNOSTICS PREEMPTIVE_SP_SERVER_DIAGNOSTICS waits are the background thread running sp_server_diagnosti… Usually noise PREEMPTIVE_XE_CALLBACKEXECUTE PREEMPTIVE_XE_SESSIONCOMMIT, TARGETINIT, TARGETFINALIZE, GETTARGETSTATE and CALLBACKEXECUTE… Usually noise PREEMPTIVE_XE_GETTARGETSTATE PREEMPTIVE_XE_SESSIONCOMMIT, TARGETINIT, TARGETFINALIZE, GETTARGETSTATE and CALLBACKEXECUTE… Usually noise PREEMPTIVE_XE_SESSIONCOMMIT PREEMPTIVE_XE_SESSIONCOMMIT, TARGETINIT, TARGETFINALIZE, GETTARGETSTATE and CALLBACKEXECUTE… Usually noise PREEMPTIVE_XE_TARGETFINALIZE PREEMPTIVE_XE_SESSIONCOMMIT, TARGETINIT, TARGETFINALIZE, GETTARGETSTATE and CALLBACKEXECUTE… Usually noise PREEMPTIVE_XE_TARGETINIT PREEMPTIVE_XE_SESSIONCOMMIT, TARGETINIT, TARGETFINALIZE, GETTARGETSTATE and CALLBACKEXECUTE… Usually noise PRINT_ROLLBACK_PROGRESS PRINT_ROLLBACK_PROGRESS waits are an ALTER DATABASE with ROLLBACK IMMEDIATE waiting for kill… Worth investigating PVS_PREALLOCATE PVS_PREALLOCATE waits are the Accelerated Database Recovery background task pacing Persisten… Usually noise PWAIT_ALL_COMPONENTS_INITIALIZED PWAIT_ALL_COMPONENTS_INITIALIZED waits are background tasks waiting at startup for engine co… Usually noise PWAIT_DIRECTLOGCONSUMER_GETNEXT PWAIT_DIRECTLOGCONSUMER_GETNEXT waits are log-reading threads waiting for the next log block… Usually noise PWAIT_EXTENSIBILITY_CLEANUP_TASK PWAIT_EXTENSIBILITY_CLEANUP_TASK waits come from a Machine Learning Services background task… Usually noise PWAIT_HADR_WORKITEM_COMPLETED PWAIT_HADR_WORKITEM_COMPLETED waits track async Availability Group operations like adding or… Worth investigating QDS_ASYNC_QUEUE QDS_ASYNC_QUEUE waits are threads waiting on the queue of Query Store data being asynchronou… Usually noise QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP waits are the Query Store cleanup task sleepi… Usually noise QDS_DYN_VECTOR QDS_DYN_VECTOR waits are threads accessing a thread-safe Query Store data structure. Usually noise QDS_LOADDB QDS_LOADDB waits are Query Store loading its data at database startup, which blocks queries… Worth investigating QDS_PERSIST_TASK_MAIN_LOOP_SLEEP QDS_PERSIST_TASK_MAIN_LOOP_SLEEP waits are the Query Store background writer sleeping betwee… Usually noise QDS_SHUTDOWN_QUEUE QDS_SHUTDOWN_QUEUE waits are a Query Store background task idling on its shutdown signal queue. Usually noise QDS_STMT QDS_STMT waits are threads latching the Query Store hash map to register new queries. Worth investigating QRY_PROFILE_LIST_MUTEX QRY_PROFILE_LIST_MUTEX waits guard the query profiling statistics list. Worth investigating QUERY_EXECUTION_INDEX_SORT_EVENT_OPEN QUERY_EXECUTION_INDEX_SORT_EVENT_OPEN waits are parallel offline index build threads synchro… Usually noise QUERY_TASK_ENQUEUE_MUTEX QUERY_TASK_ENQUEUE_MUTEX waits appear when batch-mode query threads wait for sibling threads… Usually noise REDO_THREAD_PENDING_WORK REDO_THREAD_PENDING_WORK waits are an AG secondary's redo thread waiting for more log to apply. Usually noise REPLICA_WRITES REPLICA_WRITES waits are tasks waiting for page writes to database snapshots or DBCC interna… Worth investigating REQUEST_DISPENSER_PAUSE REQUEST_DISPENSER_PAUSE waits occur while outstanding I/O drains so a snapshot backup can fr… Worth investigating REQUEST_FOR_DEADLOCK_SEARCH REQUEST_FOR_DEADLOCK_SEARCH waits are the deadlock monitor idling between searches, normally… Usually noise RESERVED_MEMORY_ALLOCATION_EXT RESERVED_MEMORY_ALLOCATION_EXT waits happen while allocating memory from a query's reserved… Worth investigating RESOURCE_GOVERNOR_IDLE RESOURCE_GOVERNOR_IDLE waits mean queries are being held idle by a Resource Governor CAP_CPU… Worth investigating RESOURCE_SEMAPHORE Query memory grant queuing (pillar) Pillar guide RESOURCE_SEMAPHORE_MUTEX RESOURCE_SEMAPHORE_MUTEX waits guard the code that hands out query memory and threads. Usually noise RESOURCE_SEMAPHORE_QUERY_COMPILE RESOURCE_SEMAPHORE_QUERY_COMPILE waits show memory pressure during compilation, from concurr… Worth investigating RESOURCE_SEMAPHORE_SMALL_QUERY RESOURCE_SEMAPHORE_SMALL_QUERY waits mean even small memory grants are queuing, a sign the m… Worth investigating RESTORE_MSDA_THREAD_BARRIER RESTORE_MSDA_THREAD_BARRIER waits sync threads restoring from multiple backup devices. Worth investigating RTDATA_LIST RTDATA_LIST waits guard runtime metrics for natively-compiled procedures. Worth investigating SESSION_WAIT_STATS_CHILDREN SESSION_WAIT_STATS_CHILDREN waits synchronize updates to sys.dm_exec_session_wait_stats data… Usually noise SHUTDOWN SHUTDOWN waits mean a SHUTDOWN statement is waiting for active connections to finish. Worth investigating SLEEP_BPOOL_FLUSH SLEEP_BPOOL_FLUSH waits mean checkpoint is pacing its writes to avoid flooding the disk. Worth investigating SLEEP_BPOOL_STEAL SLEEP_BPOOL_STEAL, SLEEP_BUFFERPOOL_HELPLW and SLEEP_MEMORYPOOL_ALLOCATEPAGES waits are free… Worth investigating SLEEP_BUFFERPOOL_HELPLW SLEEP_BPOOL_STEAL, SLEEP_BUFFERPOOL_HELPLW and SLEEP_MEMORYPOOL_ALLOCATEPAGES waits are free… Worth investigating SLEEP_DBSTARTUP SLEEP_DBSTARTUP, SLEEP_DCOMSTARTUP and SLEEP_MASTERDBREADY waits measure instance startup ph… Usually noise SLEEP_DCOMSTARTUP SLEEP_DBSTARTUP, SLEEP_DCOMSTARTUP and SLEEP_MASTERDBREADY waits measure instance startup ph… Usually noise SLEEP_MASTERDBREADY SLEEP_DBSTARTUP, SLEEP_DCOMSTARTUP and SLEEP_MASTERDBREADY waits measure instance startup ph… Usually noise SLEEP_MEMORYPOOL_ALLOCATEPAGES SLEEP_BPOOL_STEAL, SLEEP_BUFFERPOOL_HELPLW and SLEEP_MEMORYPOOL_ALLOCATEPAGES waits are free… Worth investigating SLEEP_TASK SLEEP_TASK waits are generic task sleeps, usually benign background noise, but on a live wai… Worth investigating SNI_CRITICAL_SECTION SNI_CRITICAL_SECTION waits are threads synchronizing inside the SQL Server Network Interface… Usually noise SNI_TASK_COMPLETION SNI_TASK_COMPLETION waits occur while tasks finish during a NUMA node state change, as new n… Usually noise SOS_DISPATCHER_MUTEX SOS_DISPATCHER_MUTEX waits guard the dispatcher pool management code, including pool size ad… Usually noise SOS_MEMORY_TOPLEVELBLOCKALLOCATOR SOS_MEMORY_TOPLEVELBLOCKALLOCATOR waits guard the allocator that steals memory from the buff… Worth investigating SOS_PHYS_PAGE_CACHE SOS_PHYS_PAGE_CACHE waits guard physical page allocation with locked pages in memory. Worth investigating SOS_SCHEDULER_YIELD CPU scheduler pressure (pillar) Pillar guide SOS_SYNC_TASK_ENQUEUE_EVENT SOS_SYNC_TASK_ENQUEUE_EVENT waits occur when a task starts synchronously, with the starter w… Usually noise SOS_WORKER_MIGRATION SOS_WORKER_MIGRATION waits track workers migrating between schedulers within a NUMA node, ad… Usually noise SOS_WORK_DISPATCHER SOS_WORK_DISPATCHER waits are idle SQLOS threads waiting for work. Usually noise SP_SERVER_DIAGNOSTICS_SLEEP SP_SERVER_DIAGNOSTICS_SLEEP waits are the system health monitor sleeping between sp_server_d… Usually noise SQLCLR_APPDOMAIN SQLCLR_APPDOMAIN waits occur while CLR waits for an application domain to finish starting. Worth investigating SQLCLR_ASSEMBLY SQLCLR_ASSEMBLY waits are threads waiting for access to the loaded assembly list in an appdo… Usually noise SQLTRACE_FILE_BUFFER SQLTRACE_FILE_BUFFER, FILE_READ/WRITE_IO_COMPLETION and PENDING_BUFFER_WRITERS waits cover w… Usually noise SQLTRACE_FILE_READ_IO_COMPLETION SQLTRACE_FILE_BUFFER, FILE_READ/WRITE_IO_COMPLETION and PENDING_BUFFER_WRITERS waits cover w… Usually noise SQLTRACE_FILE_WRITE_IO_COMPLETION SQLTRACE_FILE_BUFFER, FILE_READ/WRITE_IO_COMPLETION and PENDING_BUFFER_WRITERS waits cover w… Usually noise SQLTRACE_INCREMENTAL_FLUSH_SLEEP SQLTRACE_INCREMENTAL_FLUSH_SLEEP waits are the trace writer sleeping between flushes to the… Usually noise SQLTRACE_PENDING_BUFFER_WRITERS SQLTRACE_FILE_BUFFER, FILE_READ/WRITE_IO_COMPLETION and PENDING_BUFFER_WRITERS waits cover w… Usually noise TERMINATE_LISTENER TERMINATE_LISTENER waits occur while a network (SNI) listener is destroyed, during shutdowns… Usually noise THREADPOOL Worker thread exhaustion, treat as emergency (pillar) Pillar guide TRACEWRITE TRACEWRITE waits mean SQL Trace is waiting on trace buffers, usually a live Profiler session… Worth investigating TRACE_EVTNOTIF TRACE_EVTNOTIF waits occur once per fired event notification. Usually noise UCS_SESSION_REGISTRATION UCS_SESSION_REGISTRATION waits guard the list of Service Broker sessions during add and remo… Usually noise VDI_CLIENT_OTHER VDI_CLIENT_OTHER waits come from automatic seeding threads waiting for work, and the threads… Usually noise WAITFOR WAITFOR waits are sessions running WAITFOR DELAY or TIME statements. Usually noise WAITFOR_PER_QUEUE WAITFOR_PER_QUEUE waits are Service Broker workers waiting on WAITFOR RECEIVE against a spec… Usually noise WAIT_ON_SYNC_STATISTICS_REFRESH WAIT_ON_SYNC_STATISTICS_REFRESH waits mean queries are stalled waiting for synchronous stati… Worth investigating WAIT_XTP_CKPT_CLOSE WAIT_XTP_CKPT_CLOSE waits are threads waiting for an In-Memory OLTP checkpoint to complete. Usually noise WAIT_XTP_HOST_WAIT WAIT_XTP_HOST_WAIT waits are In-Memory OLTP operations started by the database engine and im… Usually noise WAIT_XTP_OFFLINE_CKPT_LOG_IO WAIT_XTP_OFFLINE_CKPT_LOG_IO waits are In-Memory OLTP checkpoint threads waiting on log read… Usually noise WAIT_XTP_OFFLINE_CKPT_NEW_LOG WAIT_XTP_OFFLINE_CKPT_NEW_LOG waits are In-Memory OLTP checkpoint threads waiting for new lo… Usually noise WAIT_XTP_RECOVERY WAIT_XTP_RECOVERY waits mean database recovery is waiting for memory-optimized objects to load. Worth investigating WAIT_XTP_TASK_SHUTDOWN WAIT_XTP_TASK_SHUTDOWN waits occur while waiting for an In-Memory OLTP thread to complete an… Usually noise WRITELOG Transaction log write latency at commit (pillar) Pillar guide WRITE_COMPLETION WRITE_COMPLETION waits show sessions waiting for write operations to finish, often under sto… Worth investigating XE_BUFFERMGR_ALLPROCESSED_EVENT XE_BUFFERMGR_ALLPROCESSED_EVENT waits occur while Extended Events session buffers flush to t… Usually noise XE_DISPATCHER_WAIT XE_DISPATCHER_WAIT waits are Extended Events dispatcher threads waiting for event buffers to… Usually noise XE_FILE_TARGET_TVF XE_FILE_TARGET_TVF waits occur while queries read Extended Events file targets via sys.fn_xe… Usually noise XE_LIVE_TARGET_TVF XE_LIVE_TARGET_TVF waits appear while someone watches an Extended Events live data stream, u… Usually noise XE_TIMER_EVENT XE_TIMER_EVENT waits are Extended Events dispatch timers implementing MAX_DISPATCH_LATENCY. Usually noise XE_TIMER_MUTEX XE_TIMER_MUTEX waits guard the Extended Events engine's timer structures, like dispatch late… Usually noise XTP_PREEMPTIVE_TASK XTP_PREEMPTIVE_TASK waits are generic In-Memory OLTP background workers running preemptively. Worth investigating
No wait type matches that. Check the spelling, or search part of
the name. PAGEIO will find every PAGEIOLATCH wait.
Leave a Reply