Monitoring wait stats is a key part of SQL Server performance tuning. This cheat sheet summarizes common wait types, their causes, and recommended actions.
1️⃣ CPU and Parallelism Waits
Wait Type
Description
Common Causes
Tuning Tips
SOS_SCHEDULER_YIELD
Query yielded CPU to allow others to run
High CPU usage, poor query plans
Optimize queries, indexes, and consider scaling CPU
Reduce transaction scope, use RCSI (Read Committed Snapshot Isolation)
LATCH_*
Waiting for internal memory structure latch
Contention on tempdb or system pages
Use multiple tempdb files, reduce contention
ASYNC_NETWORK_IO
Waiting for client to read results
Network slowness, client-side processing
Optimize network, fetch only required columns
5️⃣ Other Common Waits
Wait Type
Description
Common Causes
Tuning Tips
NETWORK_IO
Waiting for network writes
Slow network or large result sets
Reduce dataset size, optimize queries
BACKUPIO / BACKUPBUFFER
Waiting during backup operations
Backup throttling or disk I/O
Use striped backups, faster disk or backup to Azure
PREEMPTIVE_OS_WAIT
Waiting for OS-level operations
External resources or file I/O
Check antivirus, OS I/O, or external calls
🛠 How to Monitor Wait Stats
Check Cumulative Waits
SELECT TOP 20 wait_type, waiting_tasks_count, wait_time_ms/1000 AS WaitSec
FROM sys.dm_os_wait_stats
WHERE wait_type NOT IN ('SLEEP_TASK','SLEEP_SYSTEMTASK','BROKER_EVENTHANDLER')
ORDER BY wait_time_ms DESC;
Check Active Requests
SELECT session_id, wait_type, blocking_session_id, wait_time, last_wait_type
FROM sys.dm_exec_requests
WHERE status = 'suspended';
✅ Best Practices for Reducing Waits
Tune queries and indexes to reduce I/O and CPU waits
Monitor blocking and deadlocks using sys.dm_exec_requests and Extended Events
Check tempdb usage and configure multiple data files for concurrency
Use Query Store to analyze regressions and high-wait queries
Baseline wait stats to identify abnormal spikes
This cheat sheet is ideal for DBAs and developers to quickly diagnose SQL Server performance issues.