1+ SET NOCOUNT ON ;
2+ -- Last updated February 26, 2019
3+ ;WITH [Waits] AS (
4+ SELECT
5+ [wait_type],
6+ [wait_time_ms] / 1000 .0 AS [WaitS],
7+ ([wait_time_ms] - [signal_wait_time_ms]) / 1000 .0 AS [ResourceS],
8+ [signal_wait_time_ms] / 1000 .0 AS [SignalS],
9+ [waiting_tasks_count] AS [WaitCount],
10+ 100 .0 * [wait_time_ms] / SUM ([wait_time_ms]) OVER () AS [Percentage],
11+ ROW_NUMBER () OVER (ORDER BY [wait_time_ms] DESC ) AS [RowNum]
12+ FROM sys .dm_os_wait_stats
13+ WHERE [wait_type] NOT IN (
14+ -- These wait types are almost 100% never a problem and so they are
15+ -- filtered out to avoid them skewing the results. Click on the URL
16+ -- for more information.
17+ N ' BROKER_EVENTHANDLER' , -- https://www.sqlskills.com/help/waits/BROKER_EVENTHANDLER
18+ N ' BROKER_RECEIVE_WAITFOR' , -- https://www.sqlskills.com/help/waits/BROKER_RECEIVE_WAITFOR
19+ N ' BROKER_TASK_STOP' , -- https://www.sqlskills.com/help/waits/BROKER_TASK_STOP
20+ N ' BROKER_TO_FLUSH' , -- https://www.sqlskills.com/help/waits/BROKER_TO_FLUSH
21+ N ' BROKER_TRANSMITTER' , -- https://www.sqlskills.com/help/waits/BROKER_TRANSMITTER
22+ N ' CHECKPOINT_QUEUE' , -- https://www.sqlskills.com/help/waits/CHECKPOINT_QUEUE
23+ N ' CHKPT' , -- https://www.sqlskills.com/help/waits/CHKPT
24+ N ' CLR_AUTO_EVENT' , -- https://www.sqlskills.com/help/waits/CLR_AUTO_EVENT
25+ N ' CLR_MANUAL_EVENT' , -- https://www.sqlskills.com/help/waits/CLR_MANUAL_EVENT
26+ N ' CLR_SEMAPHORE' , -- https://www.sqlskills.com/help/waits/CLR_SEMAPHORE
27+ N ' CXCONSUMER' , -- https://www.sqlskills.com/help/waits/CXCONSUMER
28+ -- Maybe comment these four out if you have mirroring issues
29+ N ' DBMIRROR_DBM_EVENT' , -- https://www.sqlskills.com/help/waits/DBMIRROR_DBM_EVENT
30+ N ' DBMIRROR_EVENTS_QUEUE' , -- https://www.sqlskills.com/help/waits/DBMIRROR_EVENTS_QUEUE
31+ N ' DBMIRROR_WORKER_QUEUE' , -- https://www.sqlskills.com/help/waits/DBMIRROR_WORKER_QUEUE
32+ N ' DBMIRRORING_CMD' , -- https://www.sqlskills.com/help/waits/DBMIRRORING_CMD
33+ N ' DIRTY_PAGE_POLL' , -- https://www.sqlskills.com/help/waits/DIRTY_PAGE_POLL
34+ N ' DISPATCHER_QUEUE_SEMAPHORE' , -- https://www.sqlskills.com/help/waits/DISPATCHER_QUEUE_SEMAPHORE
35+ N ' EXECSYNC' , -- https://www.sqlskills.com/help/waits/EXECSYNC
36+ N ' FSAGENT' , -- https://www.sqlskills.com/help/waits/FSAGENT
37+ N ' FT_IFTS_SCHEDULER_IDLE_WAIT' , -- https://www.sqlskills.com/help/waits/FT_IFTS_SCHEDULER_IDLE_WAIT
38+ N ' FT_IFTSHC_MUTEX' , -- https://www.sqlskills.com/help/waits/FT_IFTSHC_MUTEX
39+ -- Maybe comment these six out if you have AG issues
40+ N ' HADR_CLUSAPI_CALL' , -- https://www.sqlskills.com/help/waits/HADR_CLUSAPI_CALL
41+ N ' HADR_FILESTREAM_IOMGR_IOCOMPLETION' , -- https://www.sqlskills.com/help/waits/HADR_FILESTREAM_IOMGR_IOCOMPLETION
42+ N ' HADR_LOGCAPTURE_WAIT' , -- https://www.sqlskills.com/help/waits/HADR_LOGCAPTURE_WAIT
43+ N ' HADR_NOTIFICATION_DEQUEUE' , -- https://www.sqlskills.com/help/waits/HADR_NOTIFICATION_DEQUEUE
44+ N ' HADR_TIMER_TASK' , -- https://www.sqlskills.com/help/waits/HADR_TIMER_TASK
45+ N ' HADR_WORK_QUEUE' , -- https://www.sqlskills.com/help/waits/HADR_WORK_QUEUE
46+ N ' KSOURCE_WAKEUP' , -- https://www.sqlskills.com/help/waits/KSOURCE_WAKEUP
47+ N ' LAZYWRITER_SLEEP' , -- https://www.sqlskills.com/help/waits/LAZYWRITER_SLEEP
48+ N ' LOGMGR_QUEUE' , -- https://www.sqlskills.com/help/waits/LOGMGR_QUEUE
49+ N ' MEMORY_ALLOCATION_EXT' , -- https://www.sqlskills.com/help/waits/MEMORY_ALLOCATION_EXT
50+ N ' ONDEMAND_TASK_QUEUE' , -- https://www.sqlskills.com/help/waits/ONDEMAND_TASK_QUEUE
51+ N ' PARALLEL_REDO_DRAIN_WORKER' , -- https://www.sqlskills.com/help/waits/PARALLEL_REDO_DRAIN_WORKER
52+ N ' PARALLEL_REDO_LOG_CACHE' , -- https://www.sqlskills.com/help/waits/PARALLEL_REDO_LOG_CACHE
53+ N ' PARALLEL_REDO_TRAN_LIST' , -- https://www.sqlskills.com/help/waits/PARALLEL_REDO_TRAN_LIST
54+ N ' PARALLEL_REDO_WORKER_SYNC' , -- https://www.sqlskills.com/help/waits/PARALLEL_REDO_WORKER_SYNC
55+ N ' PARALLEL_REDO_WORKER_WAIT_WORK' , -- https://www.sqlskills.com/help/waits/PARALLEL_REDO_WORKER_WAIT_WORK
56+ N ' PREEMPTIVE_OS_FLUSHFILEBUFFERS' , -- https://www.sqlskills.com/help/waits/PREEMPTIVE_OS_FLUSHFILEBUFFERS
57+ N ' PREEMPTIVE_XE_GETTARGETSTATE' , -- https://www.sqlskills.com/help/waits/PREEMPTIVE_XE_GETTARGETSTATE
58+ N ' PWAIT_ALL_COMPONENTS_INITIALIZED' , -- https://www.sqlskills.com/help/waits/PWAIT_ALL_COMPONENTS_INITIALIZED
59+ N ' PWAIT_DIRECTLOGCONSUMER_GETNEXT' , -- https://www.sqlskills.com/help/waits/PWAIT_DIRECTLOGCONSUMER_GETNEXT
60+ N ' QDS_PERSIST_TASK_MAIN_LOOP_SLEEP' , -- https://www.sqlskills.com/help/waits/QDS_PERSIST_TASK_MAIN_LOOP_SLEEP
61+ N ' QDS_ASYNC_QUEUE' , -- https://www.sqlskills.com/help/waits/QDS_ASYNC_QUEUE
62+ N ' QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP' ,
63+ -- https://www.sqlskills.com/help/waits/QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP
64+ N ' QDS_SHUTDOWN_QUEUE' , -- https://www.sqlskills.com/help/waits/QDS_SHUTDOWN_QUEUE
65+ N ' REDO_THREAD_PENDING_WORK' , -- https://www.sqlskills.com/help/waits/REDO_THREAD_PENDING_WORK
66+ N ' REQUEST_FOR_DEADLOCK_SEARCH' , -- https://www.sqlskills.com/help/waits/REQUEST_FOR_DEADLOCK_SEARCH
67+ N ' RESOURCE_QUEUE' , -- https://www.sqlskills.com/help/waits/RESOURCE_QUEUE
68+ N ' SERVER_IDLE_CHECK' , -- https://www.sqlskills.com/help/waits/SERVER_IDLE_CHECK
69+ N ' SLEEP_BPOOL_FLUSH' , -- https://www.sqlskills.com/help/waits/SLEEP_BPOOL_FLUSH
70+ N ' SLEEP_DBSTARTUP' , -- https://www.sqlskills.com/help/waits/SLEEP_DBSTARTUP
71+ N ' SLEEP_DCOMSTARTUP' , -- https://www.sqlskills.com/help/waits/SLEEP_DCOMSTARTUP
72+ N ' SLEEP_MASTERDBREADY' , -- https://www.sqlskills.com/help/waits/SLEEP_MASTERDBREADY
73+ N ' SLEEP_MASTERMDREADY' , -- https://www.sqlskills.com/help/waits/SLEEP_MASTERMDREADY
74+ N ' SLEEP_MASTERUPGRADED' , -- https://www.sqlskills.com/help/waits/SLEEP_MASTERUPGRADED
75+ N ' SLEEP_MSDBSTARTUP' , -- https://www.sqlskills.com/help/waits/SLEEP_MSDBSTARTUP
76+ N ' SLEEP_SYSTEMTASK' , -- https://www.sqlskills.com/help/waits/SLEEP_SYSTEMTASK
77+ N ' SLEEP_TASK' , -- https://www.sqlskills.com/help/waits/SLEEP_TASK
78+ N ' SLEEP_TEMPDBSTARTUP' , -- https://www.sqlskills.com/help/waits/SLEEP_TEMPDBSTARTUP
79+ N ' SNI_HTTP_ACCEPT' , -- https://www.sqlskills.com/help/waits/SNI_HTTP_ACCEPT
80+ N ' SOS_WORK_DISPATCHER' , -- https://www.sqlskills.com/help/waits/SOS_WORK_DISPATCHER
81+ N ' SP_SERVER_DIAGNOSTICS_SLEEP' , -- https://www.sqlskills.com/help/waits/SP_SERVER_DIAGNOSTICS_SLEEP
82+ N ' SQLTRACE_BUFFER_FLUSH' , -- https://www.sqlskills.com/help/waits/SQLTRACE_BUFFER_FLUSH
83+ N ' SQLTRACE_INCREMENTAL_FLUSH_SLEEP' , -- https://www.sqlskills.com/help/waits/SQLTRACE_INCREMENTAL_FLUSH_SLEEP
84+ N ' SQLTRACE_WAIT_ENTRIES' , -- https://www.sqlskills.com/help/waits/SQLTRACE_WAIT_ENTRIES
85+ N ' VDI_CLIENT_OTHER' , -- https://www.sqlskills.com/help/waits/VDI_CLIENT_OTHER
86+ N ' WAIT_FOR_RESULTS' , -- https://www.sqlskills.com/help/waits/WAIT_FOR_RESULTS
87+ N ' WAITFOR' , -- https://www.sqlskills.com/help/waits/WAITFOR
88+ N ' WAITFOR_TASKSHUTDOWN' , -- https://www.sqlskills.com/help/waits/WAITFOR_TASKSHUTDOWN
89+ N ' WAIT_XTP_RECOVERY' , -- https://www.sqlskills.com/help/waits/WAIT_XTP_RECOVERY
90+ N ' WAIT_XTP_HOST_WAIT' , -- https://www.sqlskills.com/help/waits/WAIT_XTP_HOST_WAIT
91+ N ' WAIT_XTP_OFFLINE_CKPT_NEW_LOG' , -- https://www.sqlskills.com/help/waits/WAIT_XTP_OFFLINE_CKPT_NEW_LOG
92+ N ' WAIT_XTP_CKPT_CLOSE' , -- https://www.sqlskills.com/help/waits/WAIT_XTP_CKPT_CLOSE
93+ N ' XE_DISPATCHER_JOIN' , -- https://www.sqlskills.com/help/waits/XE_DISPATCHER_JOIN
94+ N ' XE_DISPATCHER_WAIT' , -- https://www.sqlskills.com/help/waits/XE_DISPATCHER_WAIT
95+ N ' XE_TIMER_EVENT' -- https://www.sqlskills.com/help/waits/XE_TIMER_EVENT
96+ )
97+ AND [waiting_tasks_count] > 0
98+ )
99+ INSERT INTO dbo .WaitStats
100+ ( [Collection_Time], RowNum, [WaitType] , [Wait_S] , [Resource_S] , [Signal_S] , [WaitCount] , [Percentage] )
101+ SELECT [Collection_Time] = GETDATE (), RowNum,
102+ w .wait_type , w .WaitS , w .ResourceS , w .SignalS , w .WaitCount , w .Percentage
103+ FROM [Waits] AS w
104+ ORDER BY [Collection_Time], WaitS DESC , ResourceS DESC , SignalS DESC
105+ /*
106+ SELECT
107+ W1.[Collection_Time],
108+ MAX ([W1].[WaitType]) AS [WaitType],
109+ CAST (MAX ([W1].[Wait_S]) AS DECIMAL (16,2)) AS [Wait_S],
110+ CAST (MAX ([W1].[Resource_S]) AS DECIMAL (16,2)) AS [Resource_S],
111+ CAST (MAX ([W1].[Signal_S]) AS DECIMAL (16,2)) AS [Signal_S],
112+ MAX ([W1].[WaitCount]) AS [WaitCount],
113+ CAST (MAX ([W1].[Percentage]) AS DECIMAL (5,2)) AS [Percentage],
114+ CAST (MAX ([W1].[AvgWait_S]) AS DECIMAL (16,4)) AS [AvgWait_S],
115+ CAST (MAX ([W1].[AvgRes_S]) AS DECIMAL (16,4)) AS [AvgRes_S],
116+ CAST (MAX ([W1].[AvgSig_S]) AS DECIMAL (16,4)) AS [AvgSig_S]
117+ --,MAX([Help/Info URL]) AS [Help/Info URL]
118+ FROM dbo.WaitStats AS [W1]
119+ INNER JOIN dbo.WaitStats AS [W2] ON [W2].[RowNum] <= [W1].[RowNum] AND W1.Collection_Time = W2.Collection_Time
120+ GROUP BY W1.Collection_Time, [W1].[RowNum]
121+ HAVING SUM ([W2].[Percentage]) - MAX( [W1].[Percentage] ) < 99 -- percentage threshold
122+ ORDER BY Collection_Time, Percentage desc
123+ */
124+ GO
0 commit comments