SQL Server Wait Types Library

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
Get-WaitStatistics output in the dba-tools terminal and web UI

Reading The Output

ColumnWhat 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.

Showing all 388 wait types

AM_INDBUILD_ALLOCATIONAM_INDBUILD_ALLOCATION waits cover extent allocation during index builds; AM_SCHEMAMGR_UNSHA…Usually noiseAM_SCHEMAMGR_UNSHARED_CACHEAM_INDBUILD_ALLOCATION waits cover extent allocation during index builds; AM_SCHEMAMGR_UNSHA…Usually noiseASSEMBLY_FILTER_HASHTABLEASSEMBLY_LOAD, ASSEMBLY_FILTER_HASHTABLE, CLR_CRST and CLR_TASK_START waits cover CLR assemb…Usually noiseASSEMBLY_LOADASSEMBLY_LOAD, ASSEMBLY_FILTER_HASHTABLE, CLR_CRST and CLR_TASK_START waits cover CLR assemb…Usually noiseASYNC_DISKPOOL_LOCKASYNC_DISKPOOL_LOCK waits are threads coordinating long file operations like creating, zeroi…Usually noiseASYNC_IO_COMPLETIONASYNC_IO_COMPLETION waits indicate asynchronous file operations are taking time to complete…Worth investigatingASYNC_NETWORK_IOClient not consuming results fast enough (pillar)Pillar guideBACKUPBACKUP waits are backup threads synchronizing with each other during backup processing.Usually noiseBACKUPBUFFERBackup buffer waits (pillar)Pillar guideBACKUPIOBackup I/O throughput (pillar)Pillar guideBACKUPTHREADBACKUPTHREAD waits are backup workers waiting for other threads during backup or restore.Usually noiseBAD_PAGE_PROCESSBAD_PAGE_PROCESS waits come from the suspect page logger.Worth investigatingBMPALLOCATIONBMPALLOCATION waits relate to bitmap allocation in parallel query plans.Usually noiseBPSORTBPSORT waits are threads coordinating batch-mode sorts.Worth investigatingBROKER_CONNECTION_RECEIVE_TASKBROKER_INIT, BROKER_MASTERSTART, BROKER_SERVICE, BROKER_SHUTDOWN and related startup and end…Usually noiseBROKER_ENDPOINT_STATE_MUTEXBROKER_INIT, BROKER_MASTERSTART, BROKER_SERVICE, BROKER_SHUTDOWN and related startup and end…Usually noiseBROKER_EVENTHANDLERBROKER_EVENTHANDLER waits are the per-instance Service Broker event handler idling; its tota…Usually noiseBROKER_INITBROKER_INIT, BROKER_MASTERSTART, BROKER_SERVICE, BROKER_SHUTDOWN and related startup and end…Usually noiseBROKER_MASTERSTARTBROKER_INIT, BROKER_MASTERSTART, BROKER_SERVICE, BROKER_SHUTDOWN and related startup and end…Usually noiseBROKER_RECEIVE_WAITFORBROKER_RECEIVE_WAITFOR waits are sessions blocked on RECEIVE WAITFOR against an empty Servic…Usually noiseBROKER_REGISTERALLENDPOINTSBROKER_INIT, BROKER_MASTERSTART, BROKER_SERVICE, BROKER_SHUTDOWN and related startup and end…Usually noiseBROKER_SERVICEBROKER_INIT, BROKER_MASTERSTART, BROKER_SERVICE, BROKER_SHUTDOWN and related startup and end…Usually noiseBROKER_SHUTDOWNBROKER_INIT, BROKER_MASTERSTART, BROKER_SERVICE, BROKER_SHUTDOWN and related startup and end…Usually noiseBROKER_TASK_STOPBROKER_TASK_STOP waits are Service Broker task handlers waiting up to ten seconds to shut do…Usually noiseBROKER_TO_FLUSHBROKER_TO_FLUSH waits are the Service Broker lazy flusher idling, ticking one second per sec…Usually noiseBROKER_TRANSMISSION_TABLEBROKER_TRANSMISSION_TABLE waits cover writing inactive Service Broker transmission objects t…Usually noiseBROKER_TRANSMISSION_WORKBROKER_TRANSMISSION_WORK waits relate to Service Broker transmission work availability, simi…Usually noiseBROKER_TRANSMITTERBROKER_TRANSMITTER waits are the two Service Broker transmitter threads idling on an empty t…Usually noiseCHECKPOINT_QUEUECHECKPOINT_QUEUE waits are the background checkpoint process idling between requests.Usually noiseCHECK_TABLES_INITIALIZATIONCHECK_TABLES_INITIALIZATION waits are parallel DBCC CHECKDB threads taking turns through an…Usually noiseCHECK_TABLES_THREAD_BARRIERCHECK_TABLES_THREAD_BARRIER waits are parallel DBCC threads waiting at sync barriers.Worth investigatingCHKPTCHKPT waits occur once at instance startup while the background checkpoint process waits for…Usually noiseCLR_AUTO_EVENTCLR_AUTO_EVENT waits are CLR worker threads waiting on auto-reset events, normally just idle…Usually noiseCLR_CRSTASSEMBLY_LOAD, ASSEMBLY_FILTER_HASHTABLE, CLR_CRST and CLR_TASK_START waits cover CLR assemb…Usually noiseCLR_MANUAL_EVENTCLR_MANUAL_EVENT waits are CLR worker threads waiting on manual-reset events, normally idle…Usually noiseCLR_SEMAPHORECLR_SEMAPHORE waits are CLR tasks waiting on a semaphore.Worth investigatingCLR_TASK_STARTASSEMBLY_LOAD, ASSEMBLY_FILTER_HASHTABLE, CLR_CRST and CLR_TASK_START waits cover CLR assemb…Usually noiseCMEMPARTITIONEDCMEMPARTITIONED waits are contention on a partitioned memory object, the structure designed…Usually noiseCMEMTHREADCMEMTHREAD waits show contention on shared memory objects under high concurrency, often hot…Worth investigatingCOLUMNSTORE_BUILD_THROTTLECOLUMNSTORE_BUILD_THROTTLE waits are parallel columnstore build threads waiting while the fi…Worth investigatingCOMMIT_TABLECOMMIT_TABLE waits are contention on the hidden commit table behind Change Tracking.Worth investigatingCXCONSUMERParallelism consumer-side coordination (pillar)Pillar guideCXPACKETParallelism coordination, MAXDOP and cost threshold (pillar)Pillar guideCXROWSET_SYNCCXROWSET_SYNC waits happen when parallel scan threads coordinate access to the shared parent…Usually noiseCXSYNC_CONSUMERCXSYNC_CONSUMER waits are consumer threads at parallel exchange sync points, split out of CX…Worth investigatingCXSYNC_PORTCXSYNC_PORT waits track opening, closing, and syncing exchange ports between parallel produc…Worth investigatingDAC_INITDAC_INIT waits occur while the Dedicated Admin Connection listener initializes at startup.Usually noiseDBMIRRORING_CMDDBMIRRORING_CMD waits cover mirroring configuration, state changes, and log flush waits.Worth investigatingDBMIRROR_DBM_MUTEXDBMIRROR_DBM_MUTEX waits occur on a database mirror while parallel threads replay log records.Usually noiseDBMIRROR_EVENTS_QUEUEDBMIRROR_EVENTS_QUEUE waits are the main database mirroring thread waiting for events.Usually noiseDBMIRROR_SENDDBMIRROR_SEND waits mean database mirroring cannot push log over the network fast enough, sl…Worth investigatingDBMIRROR_WORKER_QUEUEDBMIRROR_WORKER_QUEUE waits are database mirroring worker tasks waiting for more work.Usually noiseDEADLOCK_ENUM_MUTEXDEADLOCK_ENUM_MUTEX waits synchronize the deadlock monitor with sys.dm_os_waiting_tasks so o…Usually noiseDIRTY_PAGE_POLLDIRTY_PAGE_POLL waits are the indirect checkpoint background task sleeping between polls for…Usually noiseDIRTY_PAGE_TABLE_LOCKDIRTY_PAGE_TABLE_LOCK waits are redo and read threads contending on the dirty page list of a…Worth investigatingDISKIO_SUSPENDDISKIO_SUSPEND waits mean database I/O is frozen for an external snapshot backup and session…Worth investigatingDISPATCHER_QUEUE_SEMAPHOREDISPATCHER_QUEUE_SEMAPHORE waits are dispatcher pool threads waiting for work, used by backu…Usually noiseDPT_ENTRY_LOCKDPT_ENTRY_LOCK waits are AG secondary redo and read threads contending on the same dirty pag…Worth investigatingDROPTEMPDROPTEMP waits are exponential back-off retries after a failed temp table drop, usually foll…Worth investigatingDUMP_LOG_COORDINATORDUMP_LOG_COORDINATOR and its queue variant occur while fn_dump_dblog reads log records from…Usually noiseDUMP_LOG_COORDINATOR_QUEUEDUMP_LOG_COORDINATOR and its queue variant occur while fn_dump_dblog reads log records from…Usually noiseECEC waits mean pages are being read from a Buffer Pool Extension file.Worth investigatingEE_PMOLOCKEE_PMOLOCK waits are threads synchronizing on a memory object used during statement execution.Worth investigatingEXCHANGEEXCHANGE waits occur inside the parallelism exchange iterator during parallel queries.Worth investigatingEXECSYNCEXECSYNC waits occur when parallel threads wait for a single thread to build a shared constr…Usually noiseFCB_REPLICA_READFCB_REPLICA_READ and FCB_REPLICA_WRITE waits synchronize reads and writes of database snapsh…Usually noiseFCB_REPLICA_WRITEFCB_REPLICA_READ and FCB_REPLICA_WRITE waits synchronize reads and writes of database snapsh…Usually noiseFFT_NSO_DB_LISTFFT_NSO_DB_LIST and FFT_RECOVERY waits belong to the FileTable subsystem, covering its datab…Usually noiseFFT_RECOVERYFFT_NSO_DB_LIST and FFT_RECOVERY waits belong to the FileTable subsystem, covering its datab…Usually noiseFGCB_ADD_REMOVEFGCB_ADD_REMOVE waits mean sessions are queuing behind data file growth events.Worth investigatingFT_IFTSHC_MUTEXFT_IFTSHC_MUTEX and FT_IFTS_RWLOCK waits are full-text search worker synchronization, includ…Usually noiseFT_IFTS_RWLOCKFT_IFTSHC_MUTEX and FT_IFTS_RWLOCK waits are full-text search worker synchronization, includ…Usually noiseFT_IFTS_SCHEDULER_IDLE_WAITFT_IFTS_SCHEDULER_IDLE_WAIT waits are the full-text search scheduler idling with no work que…Usually noiseFT_MASTER_MERGEFT_MASTER_MERGE waits are threads in a full-text master merge waiting on each other.Usually noiseHADR_AG_MUTEXHADR_AG_MUTEX waits are threads queuing for exclusive access to an Availability Group's conf…Usually noiseHADR_ARCONTROLLER_NOTIFICATIONS_SUBSCRIBER_LISTHADR_ARCONTROLLER_NOTIFICATIONS_SUBSCRIBER_LIST and HADR_FILESTREAM_IOMGR waits are AG inter…Usually noiseHADR_CLUSAPI_CALLHADR_CLUSAPI_CALL waits are threads calling Windows Failover Cluster APIs for Availability G…Worth investigatingHADR_DATABASE_FLOW_CONTROLHADR_DATABASE_FLOW_CONTROL waits mean an Availability Group is throttling log send because t…Worth investigatingHADR_FILESTREAM_IOMGRHADR_ARCONTROLLER_NOTIFICATIONS_SUBSCRIBER_LIST and HADR_FILESTREAM_IOMGR waits are AG inter…Usually noiseHADR_FILESTREAM_IOMGR_IOCOMPLETIONHADR_FILESTREAM_IOMGR_IOCOMPLETION waits are a FILESTREAM AG timer ticking every half second…Usually noiseHADR_GROUP_COMMITHADR_GROUP_COMMIT waits are Availability Group commits batching into shared log blocks.Worth investigatingHADR_LOGCAPTURE_WAITHADR_LOGCAPTURE_WAIT means an Availability Group log capture thread is waiting for new log t…Usually noiseHADR_LOGPROGRESS_SYNCHADR_LOGPROGRESS_SYNC waits guard the log-harden LSN structure that releases synchronous AG…Worth investigatingHADR_NOTIFICATION_DEQUEUEHADR_NOTIFICATION_DEQUEUE waits are a background task waiting for the next Windows cluster n…Usually noiseHADR_SEEDING_LIMIT_BACKUPSHADR_SEEDING_LIMIT_BACKUPS waits appear during Availability Group automatic seeding, often w…Worth investigatingHADR_SYNC_COMMITAG synchronous commit latency (pillar)Pillar guideHADR_TIMER_TASKHADR_TIMER_TASK waits cover Availability Group timer scheduling, including the waits between…Usually noiseHADR_WORK_POOLHADR_WORK_POOL waits are threads synchronizing on the Availability Group background work tas…Usually noiseHADR_WORK_QUEUEHADR_WORK_QUEUE waits are Availability Group background workers waiting for work to be assig…Usually noiseHP_SPOOL_BARRIERHP_SPOOL_BARRIER waits came from a flawed parallel spool bug fix, added and removed across v…Worth investigatingHTBUILDHTBUILD waits are threads synchronizing while building a shared batch-mode hash table.Worth investigatingHTDELETEHTDELETE waits are threads synchronizing at the end of a batch-mode hash join.Worth investigatingHTMEMOHTMEMO waits are batch-mode threads synchronizing before scanning the shared hash table to o…Worth investigatingHTREINITHTREINIT waits are batch-mode threads synchronizing before resetting a hash join for the nex…Worth investigatingHTREPARTITIONHTREPARTITION waits are batch-mode threads synchronizing while repartitioning a shared hash…Worth investigatingIMPPROV_IOWAITIMPPROV_IOWAIT waits are bulk load operations waiting on reads from the source file.Worth investigatingIO_COMPLETIONNon-data-page I/O: spills, backups, DBCC (pillar)Pillar guideIO_QUEUE_LIMITIO_QUEUE_LIMIT waits mean a session's asynchronous I/O queue is full and new I/O is throttle…Worth investigatingKSOURCE_WAKEUPKSOURCE_WAKEUP waits are the service control task waiting for Service Control Manager reques…Usually noiseLATCH_DTLATCH_DT waits are for a destroy-mode latch on a non-page structure.Usually noiseLATCH_EXLATCH_EX waits are contention on a non-page latch.Worth investigatingLATCH_KPLATCH_KP waits are keep-mode latches on non-page structures, pinning them without blocking r…Usually noiseLATCH_NLLATCH_NL waits are the null latch mode, present for completeness and essentially never used.Usually noiseLATCH_SHLATCH_SH waits are shared-latch contention on an internal non-page structure.Usually noiseLATCH_UPLATCH_UP waits are update-mode latches on internal non-page structures.Usually noiseLAZYWRITER_SLEEPLAZYWRITER_SLEEP waits are the lazy writer sleeping between buffer pool checks, one second a…Usually noiseLCK_M_BU_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_BU_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_ISLCK_M_IS waits mean a reader cannot get an Intent Shared lock, usually because an exclusive…Worth investigatingLCK_M_IS_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_IS_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_IU_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_IU_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_IXLCK_M_IX waits mean a writer cannot get an Intent Exclusive lock on a table or page, usually…Worth investigatingLCK_M_IX_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_IX_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RIN_NLLCK_M_RIn_NL waits are blocked insert-range key locks under SERIALIZABLE isolation, typicall…Worth investigatingLCK_M_RIN_NL_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RIN_NL_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RIN_S_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RIN_S_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RIN_U_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RIN_U_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RIN_X_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RIN_X_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RS_SLCK_M_RS_S waits are blocked shared range locks from SERIALIZABLE isolation, often introduce…Worth investigatingLCK_M_RS_S_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RS_S_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RS_ULCK_M_RS_U waits are blocked update-range key locks under SERIALIZABLE isolation, typical of…Worth investigatingLCK_M_RS_U_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RS_U_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RX_S_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RX_S_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RX_U_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RX_U_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RX_XLCK_M_RX_X waits are blocked exclusive range locks under SERIALIZABLE isolation, a common de…Worth investigatingLCK_M_RX_X_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_RX_X_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_SShared lock blocking (pillar)Pillar guideLCK_M_SCH_MLCK_M_SCH_M waits mean DDL is stuck waiting for a Schema Modification lock, usually behind l…Worth investigatingLCK_M_SCH_M_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_SCH_M_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_SCH_SLCK_M_SCH_S waits mean queries cannot even compile because DDL holds a schema modification l…Worth investigatingLCK_M_SCH_S_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_SCH_S_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_SIU_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_SIU_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_SIXLCK_M_SIX waits mean a session needs a Shared With Intent Exclusive lock, a scan-then-update…Worth investigatingLCK_M_SIX_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_SIX_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_S_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_S_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_UUpdate lock blocking (pillar)Pillar guideLCK_M_UIX_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_UIX_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_U_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_U_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_XExclusive lock blocking (pillar)Pillar guideLCK_M_X_ABORT_BLOCKERSWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLCK_M_X_LOW_PRIORITYWAIT_AT_LOW_PRIORITY online index optionWorth investigatingLOGBUFFERLOGBUFFER waits point to pressure in log buffer handling before flush, often from very high…Worth investigatingLOGMGRLOGMGR waits occur while a database waits for outstanding log I/O to finish before closing.Usually noiseLOGMGR_FLUSHLOGMGR_FLUSH waits mean a thread generating log records is waiting for the current log flush…Usually noiseLOGMGR_QUEUELOGMGR_QUEUE waits are the log writer threads waiting for work.Usually noiseLOGMGR_RESERVE_APPENDLOGMGR_RESERVE_APPEND waits mean the transaction log is full and threads wait for truncation…Worth investigatingLOGPOOL_CACHESIZELOGPOOL_CACHESIZE, CONSUMER, CONSUMERSET, FREEPOOLS and REPLACEMENTSET waits cover the log p…Usually noiseLOGPOOL_CONSUMERLOGPOOL_CACHESIZE, CONSUMER, CONSUMERSET, FREEPOOLS and REPLACEMENTSET waits cover the log p…Usually noiseLOGPOOL_CONSUMERSETLOGPOOL_CACHESIZE, CONSUMER, CONSUMERSET, FREEPOOLS and REPLACEMENTSET waits cover the log p…Usually noiseLOGPOOL_FREEPOOLSLOGPOOL_CACHESIZE, CONSUMER, CONSUMERSET, FREEPOOLS and REPLACEMENTSET waits cover the log p…Usually noiseLOGPOOL_REPLACEMENTSETLOGPOOL_CACHESIZE, CONSUMER, CONSUMERSET, FREEPOOLS and REPLACEMENTSET waits cover the log p…Usually noiseMEMORY_ALLOCATION_EXTMEMORY_ALLOCATION_EXT waits are threads switching to preemptive mode to allocate memory.Usually noiseMETADATA_LAZYCACHE_RWLOCKMETADATA_LAZYCACHE_RWLOCK waits guard lazily-populated metadata caches; replaced by MD_LAZYC…Usually noiseMSQL_DQMSQL_DQ waits mean a task is waiting for a distributed query against a linked server to finish.Worth investigatingMSQL_XPMSQL_XP waits measure time inside extended stored procedures.Worth investigatingOLEDBOLEDB waits mean a worker is blocked on an OLE DB provider call, often linked servers or DBC…Worth investigatingONDEMAND_TASK_QUEUEONDEMAND_TASK_QUEUE waits are a background task waiting for high-priority system requests li…Usually noisePAGEIOLATCH_DTPAGEIOLATCH_DT waits are destroy-mode buffer latches during I/O.Usually noisePAGEIOLATCH_EXData page write I/O (pillar)Pillar guidePAGEIOLATCH_KPPAGEIOLATCH_KP waits are keep-mode latches on pages in I/O requests.Worth investigatingPAGEIOLATCH_NLPAGEIOLATCH_NL is the null mode of the I/O page latch family, unused in practice.Usually noisePAGEIOLATCH_SHData page read I/O, buffer pool pressure or slow storage (pillar)Pillar guidePAGEIOLATCH_UPPAGEIOLATCH_UP waits mean a thread is reading an allocation bitmap page from disk before upd…Worth investigatingPAGELATCH_DTPAGELATCH_DT waits are destroy-mode latches on in-memory pages, present for mode completenes…Usually noisePAGELATCH_EXIn-memory page latch, tempdb allocation contention (pillar)Pillar guidePAGELATCH_KPPAGELATCH_KP waits are keep-mode latches pinning in-memory pages against destruction.Usually noisePAGELATCH_NLPAGELATCH_NL is the null page latch mode, present for completeness and not used in practice.Usually noisePAGELATCH_SHPAGELATCH_SH waits mean threads are queuing for a shared latch on an in-memory page, usually…Worth investigatingPAGELATCH_UPPAGELATCH_UP waits are update-mode latches on in-memory pages, classically PFS and SGAM cont…Worth investigatingPARALLEL_BACKUP_QUEUEPARALLEL_BACKUP_QUEUE waits occur while parallel restore threads serialize output for RESTOR…Usually noisePARALLEL_REDO_DRAIN_WORKERPARALLEL_REDO_DRAIN_WORKER waits are the main redo thread draining outstanding work at sync…Usually noisePARALLEL_REDO_FLOW_CONTROLPARALLEL_REDO_FLOW_CONTROL waits mean the main AG redo thread is waiting for parallel redo w…Worth investigatingPARALLEL_REDO_LOG_CACHEPARALLEL_REDO_LOG_CACHE waits occur occasionally after redo flow-control bottlenecks on AG r…Usually noisePARALLEL_REDO_TRAN_LISTPARALLEL_REDO_TRAN_LIST waits are the main redo thread accessing the list of transactions be…Usually noisePARALLEL_REDO_TRAN_TURNPARALLEL_REDO_TRAN_TURN waits are redo threads forced to apply log records in order.Worth investigatingPARALLEL_REDO_WORKER_SYNCPARALLEL_REDO_WORKER_SYNC waits are the main AG redo thread waiting for its worker threads t…Usually noisePARALLEL_REDO_WORKER_WAIT_WORKPARALLEL_REDO_WORKER_WAIT_WORK waits are AG parallel redo workers idling with nothing to rep…Usually noisePERFORMANCE_COUNTERS_RWLOCKPERFORMANCE_COUNTERS_RWLOCK waits synchronize adding and removing performance counter instan…Usually noisePREEMPTIVE_CLUSAPI_CLUSTERRESOURCECONTROLPREEMPTIVE_OS_CLUSTEROPS and PREEMPTIVE_CLUSAPI_CLUSTERRESOURCECONTROL waits track Windows c…Worth investigatingPREEMPTIVE_COM_COCREATEINSTANCEPREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects…Worth investigatingPREEMPTIVE_COM_CREATEACCESSORPREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects…Worth investigatingPREEMPTIVE_COM_GETDATAPREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects…Worth investigatingPREEMPTIVE_COM_QUERYINTERFACEPREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects…Worth investigatingPREEMPTIVE_COM_RELEASEACCESSORPREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects…Worth investigatingPREEMPTIVE_COM_RELEASEROWSPREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects…Worth investigatingPREEMPTIVE_COM_SEQSTRMREADPREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects…Worth investigatingPREEMPTIVE_CREATEPARAMPREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects…Worth investigatingPREEMPTIVE_DTC_ABORTREQUESTDONEPREEMPTIVE_DTC_BEGINTRANSACTION, ENLIST, ABORTREQUESTDONE and OS_DTCOPS waits track MSDTC ca…Worth investigatingPREEMPTIVE_DTC_BEGINTRANSACTIONPREEMPTIVE_DTC_BEGINTRANSACTION, ENLIST, ABORTREQUESTDONE and OS_DTCOPS waits track MSDTC ca…Worth investigatingPREEMPTIVE_DTC_ENLISTPREEMPTIVE_DTC_BEGINTRANSACTION, ENLIST, ABORTREQUESTDONE and OS_DTCOPS waits track MSDTC ca…Worth investigatingPREEMPTIVE_FILESIZEGETPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_FSRECOVER_UNCONDITIONALUNDOPREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp…Worth investigatingPREEMPTIVE_HADR_LEASE_MECHANISMPREEMPTIVE_HADR_LEASE_MECHANISM waits track AG lease renewal after a lease timeout.Worth investigatingPREEMPTIVE_OLEDBOPSPREEMPTIVE_OLEDBOPS waits are threads in preemptive mode talking to OLE DB providers, the li…Usually noisePREEMPTIVE_OLEDB_SETPROPERTIESPREEMPTIVE_COM_GETDATA, QUERYINTERFACE, and related COM waits track calls into COM objects…Worth investigatingPREEMPTIVE_OS_ACCEPTSECURITYCONTEXTPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_ACQUIRECREDENTIALSHANDLEPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_AUTHENTICATIONOPSPREEMPTIVE_OS_AUTHENTICATIONOPS waits track Windows authentication calls.Worth investigatingPREEMPTIVE_OS_AUTHORIZATIONOPSPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_AUTHZGETINFORMATIONFROMCONTEXTPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_AUTHZINITIALIZECONTEXTFROMSIDPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_AUTHZINITIALIZERESOURCEMANAGERPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_BACKUPREADPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_BCRYPTIMPORTKEYPREEMPTIVE_OS_CRYPTOPS, CRYPTIMPORTKEY, VERIFYTRUST and related waits track Windows crypto A…Usually noisePREEMPTIVE_OS_CLOSEHANDLEPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_CLUSTEROPSPREEMPTIVE_OS_CLUSTEROPS and PREEMPTIVE_CLUSAPI_CLUSTERRESOURCECONTROL waits track Windows c…Worth investigatingPREEMPTIVE_OS_COMOPSPREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp…Worth investigatingPREEMPTIVE_OS_COMPLETEAUTHTOKENPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_COPYFILEPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_CREATEDIRECTORYPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_CREATEFILEPREEMPTIVE_OS_CREATEFILE waits are Windows CreateFile calls, opening as well as creating files.Worth investigatingPREEMPTIVE_OS_CRYPTACQUIRECONTEXTPREEMPTIVE_OS_CRYPTOPS, CRYPTIMPORTKEY, VERIFYTRUST and related waits track Windows crypto A…Usually noisePREEMPTIVE_OS_CRYPTIMPORTKEYPREEMPTIVE_OS_CRYPTOPS, CRYPTIMPORTKEY, VERIFYTRUST and related waits track Windows crypto A…Usually noisePREEMPTIVE_OS_CRYPTOPSPREEMPTIVE_OS_CRYPTOPS, CRYPTIMPORTKEY, VERIFYTRUST and related waits track Windows crypto A…Usually noisePREEMPTIVE_OS_DECRYPTMESSAGEPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_DELETEFILEPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_DELETESECURITYCONTEXTPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_DEVICEIOCONTROLPREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp…Worth investigatingPREEMPTIVE_OS_DEVICEOPSPREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp…Worth investigatingPREEMPTIVE_OS_DIRSVC_NETWORKOPSPREEMPTIVE_OS_NETGROUPGETUSERS, NETUSERGETGROUPS and related waits track AD group membership…Worth investigatingPREEMPTIVE_OS_DISCONNECTNAMEDPIPEPREEMPTIVE_OS_GETADDRINFO, WINSOCKOPS, DISCONNECTNAMEDPIPE and MESSAGEQUEUEOPS waits track n…Worth investigatingPREEMPTIVE_OS_DOMAINSERVICESOPSPREEMPTIVE_OS_NETGROUPGETUSERS, NETUSERGETGROUPS and related waits track AD group membership…Worth investigatingPREEMPTIVE_OS_DSGETDCNAMEPREEMPTIVE_OS_DSGETDCNAME waits are Windows DsGetDcName calls locating a domain controller.Worth investigatingPREEMPTIVE_OS_DTCOPSPREEMPTIVE_DTC_BEGINTRANSACTION, ENLIST, ABORTREQUESTDONE and OS_DTCOPS waits track MSDTC ca…Worth investigatingPREEMPTIVE_OS_ENCRYPTMESSAGEPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_FILEOPSPREEMPTIVE_OS_FILEOPS waits are generic Windows file system calls made outside SQL Server sc…Worth investigatingPREEMPTIVE_OS_FINDFILEPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_FLUSHFILEBUFFERSPREEMPTIVE_OS_FLUSHFILEBUFFERS waits are FlushFileBuffers calls forcing writes to durable me…Worth investigatingPREEMPTIVE_OS_FORMATMESSAGEPREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp…Worth investigatingPREEMPTIVE_OS_FREECREDENTIALSHANDLEPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_FREELIBRARYPREEMPTIVE_OS_LOADLIBRARY, FREELIBRARY and LIBRARYOPS waits track DLL load and unload calls…Usually noisePREEMPTIVE_OS_GENERICOPSPREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp…Worth investigatingPREEMPTIVE_OS_GETADDRINFOPREEMPTIVE_OS_GETADDRINFO, WINSOCKOPS, DISCONNECTNAMEDPIPE and MESSAGEQUEUEOPS waits track n…Worth investigatingPREEMPTIVE_OS_GETCOMPRESSEDFILESIZEPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_GETDISKFREESPACEPREEMPTIVE_OS_GETDISKFREESPACE waits are Windows GetDiskFreeSpace calls checking volume spac…Usually noisePREEMPTIVE_OS_GETFILEATTRIBUTESPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_GETFILESIZEPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_GETFINALFILEPATHBYHANDLEPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_GETLONGPATHNAMEPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_GETPROCADDRESSPREEMPTIVE_OS_GETPROCADDRESS waits track resolving extended stored procedure addresses in DL…Worth investigatingPREEMPTIVE_OS_GETVOLUMENAMEFORVOLUMEMOUNTPOINTPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_GETVOLUMEPATHNAMEPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_INITIALIZESECURITYCONTEXTPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_LIBRARYOPSPREEMPTIVE_OS_LOADLIBRARY, FREELIBRARY and LIBRARYOPS waits track DLL load and unload calls…Usually noisePREEMPTIVE_OS_LOADLIBRARYPREEMPTIVE_OS_LOADLIBRARY, FREELIBRARY and LIBRARYOPS waits track DLL load and unload calls…Usually noisePREEMPTIVE_OS_LOGONUSERPREEMPTIVE_OS_LOGONUSER waits are Windows LogonUser calls, common with proxies and linked se…Usually noisePREEMPTIVE_OS_LOOKUPACCOUNTSIDPREEMPTIVE_OS_LOOKUPACCOUNTSID waits are Windows SID-to-name lookups, often hitting domain c…Worth investigatingPREEMPTIVE_OS_MESSAGEQUEUEOPSPREEMPTIVE_OS_GETADDRINFO, WINSOCKOPS, DISCONNECTNAMEDPIPE and MESSAGEQUEUEOPS waits track n…Worth investigatingPREEMPTIVE_OS_MOVEFILEPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_NCRYPTIMPORTKEYPREEMPTIVE_OS_CRYPTOPS, CRYPTIMPORTKEY, VERIFYTRUST and related waits track Windows crypto A…Usually noisePREEMPTIVE_OS_NETGROUPGETUSERSPREEMPTIVE_OS_NETGROUPGETUSERS, NETUSERGETGROUPS and related waits track AD group membership…Worth investigatingPREEMPTIVE_OS_NETLOCALGROUPGETMEMBERSPREEMPTIVE_OS_NETGROUPGETUSERS, NETUSERGETGROUPS and related waits track AD group membership…Worth investigatingPREEMPTIVE_OS_NETUSERGETGROUPSPREEMPTIVE_OS_NETGROUPGETUSERS, NETUSERGETGROUPS and related waits track AD group membership…Worth investigatingPREEMPTIVE_OS_NETUSERGETLOCALGROUPSPREEMPTIVE_OS_NETGROUPGETUSERS, NETUSERGETGROUPS and related waits track AD group membership…Worth investigatingPREEMPTIVE_OS_NETUSERMODALSGETPREEMPTIVE_OS_NETGROUPGETUSERS, NETUSERGETGROUPS and related waits track AD group membership…Worth investigatingPREEMPTIVE_OS_NETVALIDATEPASSWORDPOLICYPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_NETVALIDATEPASSWORDPOLICYFREEPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_OPENDIRECTORYPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_PDH_WMI_INITPREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp…Worth investigatingPREEMPTIVE_OS_PIPEOPSPREEMPTIVE_OS_PIPEOPS waits track Windows pipe operations, almost always xp_cmdshell.Worth investigatingPREEMPTIVE_OS_PROCESSOPSPREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp…Worth investigatingPREEMPTIVE_OS_QUERYCONTEXTATTRIBUTESPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_QUERYREGISTRYPREEMPTIVE_OS_QUERYREGISTRY waits are Windows registry calls.Worth investigatingPREEMPTIVE_OS_QUERYSECURITYCONTEXTTOKENPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_REMOVEDIRECTORYPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_REPORTEVENTPREEMPTIVE_OS_REPORTEVENT waits are Windows ReportEvent calls writing to the event log.Worth investigatingPREEMPTIVE_OS_REVERTTOSELFPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_RSFXDEVICEOPSPREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp…Worth investigatingPREEMPTIVE_OS_SECURITYOPSPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_SERVICEOPSPREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp…Worth investigatingPREEMPTIVE_OS_SETENDOFFILEPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_SETFILEPOINTERPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_SETFILEVALIDDATAPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_SETNAMEDSECURITYINFOPREEMPTIVE_OS security waits like INITIALIZESECURITYCONTEXT and AUTHORIZATIONOPS track Windo…Worth investigatingPREEMPTIVE_OS_SQMLAUNCHPREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp…Worth investigatingPREEMPTIVE_OS_VERIFYSIGNATUREPREEMPTIVE_OS_CRYPTOPS, CRYPTIMPORTKEY, VERIFYTRUST and related waits track Windows crypto A…Usually noisePREEMPTIVE_OS_VERIFYTRUSTPREEMPTIVE_OS_CRYPTOPS, CRYPTIMPORTKEY, VERIFYTRUST and related waits track Windows crypto A…Usually noisePREEMPTIVE_OS_VSSOPSPREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp…Worth investigatingPREEMPTIVE_OS_WAITFORSINGLEOBJECTPREEMPTIVE_OS_WAITFORSINGLEOBJECT waits are threads synchronizing with external client proce…Worth investigatingPREEMPTIVE_OS_WINSOCKOPSPREEMPTIVE_OS_GETADDRINFO, WINSOCKOPS, DISCONNECTNAMEDPIPE and MESSAGEQUEUEOPS waits track n…Worth investigatingPREEMPTIVE_OS_WRITEFILEPREEMPTIVE_OS file waits like COPYFILE, DELETEFILE, SETFILEVALIDDATA and GETFILESIZE track s…Worth investigatingPREEMPTIVE_OS_WRITEFILEGATHERPREEMPTIVE_OS_WRITEFILEGATHER waits usually mean file growth is zero-filling new space.Worth investigatingPREEMPTIVE_OS_WSASETLASTERRORPREEMPTIVE_OS_DEVICEOPS, VSSOPS, PROCESSOPS, SERVICEOPS, GENERICOPS and other one-API preemp…Worth investigatingPREEMPTIVE_SB_STOPENDPOINTPREEMPTIVE_SB_STOPENDPOINT waits are threads calling Windows while shutting down a Service B…Usually noisePREEMPTIVE_SP_SERVER_DIAGNOSTICSPREEMPTIVE_SP_SERVER_DIAGNOSTICS waits are the background thread running sp_server_diagnosti…Usually noisePREEMPTIVE_XE_CALLBACKEXECUTEPREEMPTIVE_XE_SESSIONCOMMIT, TARGETINIT, TARGETFINALIZE, GETTARGETSTATE and CALLBACKEXECUTE…Usually noisePREEMPTIVE_XE_GETTARGETSTATEPREEMPTIVE_XE_SESSIONCOMMIT, TARGETINIT, TARGETFINALIZE, GETTARGETSTATE and CALLBACKEXECUTE…Usually noisePREEMPTIVE_XE_SESSIONCOMMITPREEMPTIVE_XE_SESSIONCOMMIT, TARGETINIT, TARGETFINALIZE, GETTARGETSTATE and CALLBACKEXECUTE…Usually noisePREEMPTIVE_XE_TARGETFINALIZEPREEMPTIVE_XE_SESSIONCOMMIT, TARGETINIT, TARGETFINALIZE, GETTARGETSTATE and CALLBACKEXECUTE…Usually noisePREEMPTIVE_XE_TARGETINITPREEMPTIVE_XE_SESSIONCOMMIT, TARGETINIT, TARGETFINALIZE, GETTARGETSTATE and CALLBACKEXECUTE…Usually noisePRINT_ROLLBACK_PROGRESSPRINT_ROLLBACK_PROGRESS waits are an ALTER DATABASE with ROLLBACK IMMEDIATE waiting for kill…Worth investigatingPVS_PREALLOCATEPVS_PREALLOCATE waits are the Accelerated Database Recovery background task pacing Persisten…Usually noisePWAIT_ALL_COMPONENTS_INITIALIZEDPWAIT_ALL_COMPONENTS_INITIALIZED waits are background tasks waiting at startup for engine co…Usually noisePWAIT_DIRECTLOGCONSUMER_GETNEXTPWAIT_DIRECTLOGCONSUMER_GETNEXT waits are log-reading threads waiting for the next log block…Usually noisePWAIT_EXTENSIBILITY_CLEANUP_TASKPWAIT_EXTENSIBILITY_CLEANUP_TASK waits come from a Machine Learning Services background task…Usually noisePWAIT_HADR_WORKITEM_COMPLETEDPWAIT_HADR_WORKITEM_COMPLETED waits track async Availability Group operations like adding or…Worth investigatingQDS_ASYNC_QUEUEQDS_ASYNC_QUEUE waits are threads waiting on the queue of Query Store data being asynchronou…Usually noiseQDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEPQDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP waits are the Query Store cleanup task sleepi…Usually noiseQDS_DYN_VECTORQDS_DYN_VECTOR waits are threads accessing a thread-safe Query Store data structure.Usually noiseQDS_LOADDBQDS_LOADDB waits are Query Store loading its data at database startup, which blocks queries…Worth investigatingQDS_PERSIST_TASK_MAIN_LOOP_SLEEPQDS_PERSIST_TASK_MAIN_LOOP_SLEEP waits are the Query Store background writer sleeping betwee…Usually noiseQDS_SHUTDOWN_QUEUEQDS_SHUTDOWN_QUEUE waits are a Query Store background task idling on its shutdown signal queue.Usually noiseQDS_STMTQDS_STMT waits are threads latching the Query Store hash map to register new queries.Worth investigatingQRY_PROFILE_LIST_MUTEXQRY_PROFILE_LIST_MUTEX waits guard the query profiling statistics list.Worth investigatingQUERY_EXECUTION_INDEX_SORT_EVENT_OPENQUERY_EXECUTION_INDEX_SORT_EVENT_OPEN waits are parallel offline index build threads synchro…Usually noiseQUERY_TASK_ENQUEUE_MUTEXQUERY_TASK_ENQUEUE_MUTEX waits appear when batch-mode query threads wait for sibling threads…Usually noiseREDO_THREAD_PENDING_WORKREDO_THREAD_PENDING_WORK waits are an AG secondary's redo thread waiting for more log to apply.Usually noiseREPLICA_WRITESREPLICA_WRITES waits are tasks waiting for page writes to database snapshots or DBCC interna…Worth investigatingREQUEST_DISPENSER_PAUSEREQUEST_DISPENSER_PAUSE waits occur while outstanding I/O drains so a snapshot backup can fr…Worth investigatingREQUEST_FOR_DEADLOCK_SEARCHREQUEST_FOR_DEADLOCK_SEARCH waits are the deadlock monitor idling between searches, normally…Usually noiseRESERVED_MEMORY_ALLOCATION_EXTRESERVED_MEMORY_ALLOCATION_EXT waits happen while allocating memory from a query's reserved…Worth investigatingRESOURCE_GOVERNOR_IDLERESOURCE_GOVERNOR_IDLE waits mean queries are being held idle by a Resource Governor CAP_CPU…Worth investigatingRESOURCE_SEMAPHOREQuery memory grant queuing (pillar)Pillar guideRESOURCE_SEMAPHORE_MUTEXRESOURCE_SEMAPHORE_MUTEX waits guard the code that hands out query memory and threads.Usually noiseRESOURCE_SEMAPHORE_QUERY_COMPILERESOURCE_SEMAPHORE_QUERY_COMPILE waits show memory pressure during compilation, from concurr…Worth investigatingRESOURCE_SEMAPHORE_SMALL_QUERYRESOURCE_SEMAPHORE_SMALL_QUERY waits mean even small memory grants are queuing, a sign the m…Worth investigatingRESTORE_MSDA_THREAD_BARRIERRESTORE_MSDA_THREAD_BARRIER waits sync threads restoring from multiple backup devices.Worth investigatingRTDATA_LISTRTDATA_LIST waits guard runtime metrics for natively-compiled procedures.Worth investigatingSESSION_WAIT_STATS_CHILDRENSESSION_WAIT_STATS_CHILDREN waits synchronize updates to sys.dm_exec_session_wait_stats data…Usually noiseSHUTDOWNSHUTDOWN waits mean a SHUTDOWN statement is waiting for active connections to finish.Worth investigatingSLEEP_BPOOL_FLUSHSLEEP_BPOOL_FLUSH waits mean checkpoint is pacing its writes to avoid flooding the disk.Worth investigatingSLEEP_BPOOL_STEALSLEEP_BPOOL_STEAL, SLEEP_BUFFERPOOL_HELPLW and SLEEP_MEMORYPOOL_ALLOCATEPAGES waits are free…Worth investigatingSLEEP_BUFFERPOOL_HELPLWSLEEP_BPOOL_STEAL, SLEEP_BUFFERPOOL_HELPLW and SLEEP_MEMORYPOOL_ALLOCATEPAGES waits are free…Worth investigatingSLEEP_DBSTARTUPSLEEP_DBSTARTUP, SLEEP_DCOMSTARTUP and SLEEP_MASTERDBREADY waits measure instance startup ph…Usually noiseSLEEP_DCOMSTARTUPSLEEP_DBSTARTUP, SLEEP_DCOMSTARTUP and SLEEP_MASTERDBREADY waits measure instance startup ph…Usually noiseSLEEP_MASTERDBREADYSLEEP_DBSTARTUP, SLEEP_DCOMSTARTUP and SLEEP_MASTERDBREADY waits measure instance startup ph…Usually noiseSLEEP_MEMORYPOOL_ALLOCATEPAGESSLEEP_BPOOL_STEAL, SLEEP_BUFFERPOOL_HELPLW and SLEEP_MEMORYPOOL_ALLOCATEPAGES waits are free…Worth investigatingSLEEP_TASKSLEEP_TASK waits are generic task sleeps, usually benign background noise, but on a live wai…Worth investigatingSNI_CRITICAL_SECTIONSNI_CRITICAL_SECTION waits are threads synchronizing inside the SQL Server Network Interface…Usually noiseSNI_TASK_COMPLETIONSNI_TASK_COMPLETION waits occur while tasks finish during a NUMA node state change, as new n…Usually noiseSOS_DISPATCHER_MUTEXSOS_DISPATCHER_MUTEX waits guard the dispatcher pool management code, including pool size ad…Usually noiseSOS_MEMORY_TOPLEVELBLOCKALLOCATORSOS_MEMORY_TOPLEVELBLOCKALLOCATOR waits guard the allocator that steals memory from the buff…Worth investigatingSOS_PHYS_PAGE_CACHESOS_PHYS_PAGE_CACHE waits guard physical page allocation with locked pages in memory.Worth investigatingSOS_SCHEDULER_YIELDCPU scheduler pressure (pillar)Pillar guideSOS_SYNC_TASK_ENQUEUE_EVENTSOS_SYNC_TASK_ENQUEUE_EVENT waits occur when a task starts synchronously, with the starter w…Usually noiseSOS_WORKER_MIGRATIONSOS_WORKER_MIGRATION waits track workers migrating between schedulers within a NUMA node, ad…Usually noiseSOS_WORK_DISPATCHERSOS_WORK_DISPATCHER waits are idle SQLOS threads waiting for work.Usually noiseSP_SERVER_DIAGNOSTICS_SLEEPSP_SERVER_DIAGNOSTICS_SLEEP waits are the system health monitor sleeping between sp_server_d…Usually noiseSQLCLR_APPDOMAINSQLCLR_APPDOMAIN waits occur while CLR waits for an application domain to finish starting.Worth investigatingSQLCLR_ASSEMBLYSQLCLR_ASSEMBLY waits are threads waiting for access to the loaded assembly list in an appdo…Usually noiseSQLTRACE_FILE_BUFFERSQLTRACE_FILE_BUFFER, FILE_READ/WRITE_IO_COMPLETION and PENDING_BUFFER_WRITERS waits cover w…Usually noiseSQLTRACE_FILE_READ_IO_COMPLETIONSQLTRACE_FILE_BUFFER, FILE_READ/WRITE_IO_COMPLETION and PENDING_BUFFER_WRITERS waits cover w…Usually noiseSQLTRACE_FILE_WRITE_IO_COMPLETIONSQLTRACE_FILE_BUFFER, FILE_READ/WRITE_IO_COMPLETION and PENDING_BUFFER_WRITERS waits cover w…Usually noiseSQLTRACE_INCREMENTAL_FLUSH_SLEEPSQLTRACE_INCREMENTAL_FLUSH_SLEEP waits are the trace writer sleeping between flushes to the…Usually noiseSQLTRACE_PENDING_BUFFER_WRITERSSQLTRACE_FILE_BUFFER, FILE_READ/WRITE_IO_COMPLETION and PENDING_BUFFER_WRITERS waits cover w…Usually noiseTERMINATE_LISTENERTERMINATE_LISTENER waits occur while a network (SNI) listener is destroyed, during shutdowns…Usually noiseTHREADPOOLWorker thread exhaustion, treat as emergency (pillar)Pillar guideTRACEWRITETRACEWRITE waits mean SQL Trace is waiting on trace buffers, usually a live Profiler session…Worth investigatingTRACE_EVTNOTIFTRACE_EVTNOTIF waits occur once per fired event notification.Usually noiseUCS_SESSION_REGISTRATIONUCS_SESSION_REGISTRATION waits guard the list of Service Broker sessions during add and remo…Usually noiseVDI_CLIENT_OTHERVDI_CLIENT_OTHER waits come from automatic seeding threads waiting for work, and the threads…Usually noiseWAITFORWAITFOR waits are sessions running WAITFOR DELAY or TIME statements.Usually noiseWAITFOR_PER_QUEUEWAITFOR_PER_QUEUE waits are Service Broker workers waiting on WAITFOR RECEIVE against a spec…Usually noiseWAIT_ON_SYNC_STATISTICS_REFRESHWAIT_ON_SYNC_STATISTICS_REFRESH waits mean queries are stalled waiting for synchronous stati…Worth investigatingWAIT_XTP_CKPT_CLOSEWAIT_XTP_CKPT_CLOSE waits are threads waiting for an In-Memory OLTP checkpoint to complete.Usually noiseWAIT_XTP_HOST_WAITWAIT_XTP_HOST_WAIT waits are In-Memory OLTP operations started by the database engine and im…Usually noiseWAIT_XTP_OFFLINE_CKPT_LOG_IOWAIT_XTP_OFFLINE_CKPT_LOG_IO waits are In-Memory OLTP checkpoint threads waiting on log read…Usually noiseWAIT_XTP_OFFLINE_CKPT_NEW_LOGWAIT_XTP_OFFLINE_CKPT_NEW_LOG waits are In-Memory OLTP checkpoint threads waiting for new lo…Usually noiseWAIT_XTP_RECOVERYWAIT_XTP_RECOVERY waits mean database recovery is waiting for memory-optimized objects to load.Worth investigatingWAIT_XTP_TASK_SHUTDOWNWAIT_XTP_TASK_SHUTDOWN waits occur while waiting for an In-Memory OLTP thread to complete an…Usually noiseWRITELOGTransaction log write latency at commit (pillar)Pillar guideWRITE_COMPLETIONWRITE_COMPLETION waits show sessions waiting for write operations to finish, often under sto…Worth investigatingXE_BUFFERMGR_ALLPROCESSED_EVENTXE_BUFFERMGR_ALLPROCESSED_EVENT waits occur while Extended Events session buffers flush to t…Usually noiseXE_DISPATCHER_WAITXE_DISPATCHER_WAIT waits are Extended Events dispatcher threads waiting for event buffers to…Usually noiseXE_FILE_TARGET_TVFXE_FILE_TARGET_TVF waits occur while queries read Extended Events file targets via sys.fn_xe…Usually noiseXE_LIVE_TARGET_TVFXE_LIVE_TARGET_TVF waits appear while someone watches an Extended Events live data stream, u…Usually noiseXE_TIMER_EVENTXE_TIMER_EVENT waits are Extended Events dispatch timers implementing MAX_DISPATCH_LATENCY.Usually noiseXE_TIMER_MUTEXXE_TIMER_MUTEX waits guard the Extended Events engine's timer structures, like dispatch late…Usually noiseXTP_PREEMPTIVE_TASKXTP_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.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *