DTC_WAITFOR_OUTCOME
|
DTC
|
True
|
Occurs when recovery tasks wait for MS DTC to become active to enable the resolution of prepared transactions.
|
|
DUMP_LOG_COORDINATOR
|
|
True
|
Occurs when a main task is waiting for a subtask to generate data. Ordinarily, this state does not occur. A long wait indicates an unexpected blockage. The subtask should be investigated.
|
|
EC
|
|
|
Internal Only.
|
|
EE_PMOLOCK
|
|
True
|
Occurs during synchronization of certain memory allocation during statement execution.
|
|
EE_SPECPROC_MAP_INIT
|
|
False
|
Occurs during synchronization of internal procedure hash table creation. This wait can only occur during the first accesses of the hash table after the SQL Server 2005 instance started.
|
|
ENABLE_VERSIONING
|
|
True
|
Occurs when SQL Server waits for all update transactions in this database to finish before declaring the database ready to transition to snapshot isolation enabled state. This state is used when SQL Server enables snapshot isolation by using the ALTER DATABASE statement.
|
|
ERROR_REPORTING_MANAGER
|
|
|
|
|
EXCHANGE
|
|
True
|
Occurs during synchronization in the query processor exchange iterator during parallel queries.
|
Check for parallelism: sp_Configure “max degree of parallelism”.
If max degree of parallelism = 0, you might want to use one of the following options:
-
turn off parallelism completely: set max degree of parallelism to 1
-
limit parallelism by setting max degree of parallelism to some number less than the total number of CPUs. For example if you have 8 processors, set max degree of parallelism to <=4.
|
EXECSYNC
|
|
True
|
Occurs during parallel queries while synchronizing in query processor in areas not related to the exchange iterator. Examples of such area are bitmaps, large binary objects (BLOBs) and the spool iterator. LOBs can frequently use this wait state. Bitmap and spool use should not cause contention.
|
|
Failpoint
|
|
True
|
Internal only.
|
|
FCB_REPLICA_READ
|
|
True
|
Occurs when the reads of a snapshot (or a temporary snapshot created by DBCC) sparse file are synchronized.
|
|
FCB_REPLICA_WRITE
|
|
True
|
Occurs when the pushing or pulling of a page to a snapshot (or a temporary snapshot created by DBCC) sparse file are synchronized.
|
|
FT_RESTART_CRAWL
|
|
True
|
Occurs when a full-text crawl (population) must restart from a last known good point to recover from a transient failure. The wait is for letting the worker tasks currently working on that population to complete/exit the current step.
|
|
FT_RESUME_CRAWL
|
|
True
|
Occurs when throttled full-text crawls (population) pause to wait for existing activity to finish.
|
|
HTTP_ENDPOINT_COLLCREATE
|
|
True
|
Internal only.
|
|
HTTP_ENUMERATION
|
|
True
|
Occurs at startup to enumerate the HTTP endpoints to start HTTP.
|
|
IMP_IMPORT_MUTEX
|
|
True
|
Internal only.
|
|
IMPPROV_IOWAIT
|
|
True
|
Occurs when SQL Server waits for a bulkload I/O to finish.
|
|
INDEX_USAGE_STATS_MUTEX
|
|
True
|
Internal only.
|
|
IO_AUDIT_MUTEX
|
|
True
|
Occurs during synchronization of trace event buffers.
|
|
IO_COMPLETION
|
|
True
|
Occurs while waiting for I/O operations to finish. This wait type generally represents non-data page I/Os. Data page I/O completion waits appear as PAGEIOLATCH_* waits.
Identify disk bottlenecks by using Performance Counters, Profiler, sys.dm_io_virtual_file_stats and SHOWPLAN
Any of the following reduces these waits:
-
Adding additional IO bandwidth,
-
Balancing IO across other drives
-
Reducing IO with appropriate indexing
-
Check for bad query plans
|
See Disk performance counters:
-
Disk sec/read
-
Disk sec/write
-
Disk queues
See SQL Buffer Manager performance counters:
-
Page Life Expectancy
-
Checkpoint pages/sec
-
Lazy writes/sec
See SQL Access Methods for correct indexing:
-
Full Scans/sec
-
Index seeks/sec
See memory performance counter
Refer to Io_stalls section to identify IO bottlenecks.
SQL Profiler can be used to identify which Transact-SQL statements do scan. Select the scans event class and events scan:started and scan:completed. Include the object Id data column. Save the profiler trace to a trace table, and then search for the scans event. The scan:completed event provides the associated IO so that you can also search for high reads, writes, and duration.
Check SHOWPLAN for bad query plans
|
KTM_ENLISTMENT
|
|
True
|
Internal Only.
|
|
KTM_RECOVERY_MANAGER
|
|
True
|
Internal Only.
|
|
KTM_RECOVERY_RESOLUTION
|
|
True
|
Internal Only.
|
|
LATCH_x
|
|
|
Latches are short term light weight synchronization objects. Latches are not held for the duration of a transaction.
“Plain” latches are generally not related to IO. These latches can be used for a variety of things, but they are not used to synchronize access to buffer pages (PAGELATCH_x is used for that).
Possibly the most common case is contention on internal caches (not the buffer pool pages), especially when using heaps or text.
|
If high, check PERFMON for
-
memory pressure
-
SQL Latch waits (ms)
Look for LOG and Pagelatch_UP wait types.
Latch_x waits can frequently be reduced by solving LOG and PAGELATCH_UP contention. If there is no LOG or PAGELATCH_UP contention, the only other option is to partition the table/index in question in order to create multiple caches (the caches are per-index).
|
LATCH_DT
|
|
True
|
Occurs when waiting for a DT (destroy) latch. This does not include buffer latches or transaction mark latches. A breakdown of LATCH_* waits is available in sys.dm_os_latch_stats. Notice that sys.dm_os_latch_stats group LATCH_NL, LATCH_SH, LATCH_UP, LATCH_EX and LATCH_DT waits together.
|
See LATCH_x
|
LATCH_EX
|
|
True
|
Occurs when waiting for a EX (exclusive) latch. This does not include buffer latches or transaction mark latches. A breakdown of LATCH_* waits is available in sys.dm_os_latch_stats. Notice that sys.dm_os_latch_stats groups LATCH_NL, LATCH_SH, LATCH_UP, LATCH_EX, and LATCH_DT waits together.
|
See LATCH_x
|
LATCH_KP
|
|
True
|
Occurs when waiting for a KP (keep) latch. This does not include buffer latches or transaction mark latches. A break of latch_* waits is available in sys.dm_os_latch_stats. Notice that sys.dm_os_latch_stats groups LATCH_NL, LATCH_SH, LATCH_UP, LATCH_EX, and LATCH_DT waits together.
|
See LATCH_x
|
LATCH_NL
|
|
True
|
Internal Only.
|
See LATCH_x
|
LATCH_SH
|
|
True
|
Occurs when waiting for a SH (share) latch. This does not include buffer latches or transaction mark latches. A break of latch_* waits is available in sys.dm_os_latch_stats. Notice that sys.dm_os_latch_stats groups LATCH_NL, LATCH_SH, LATCH_UP, LATCH_EX, and LATCH_DT waits together.
|
See LATCH_x
|
LATCH_UP
|
|
True
|
Occurs when waiting for a UP (update) latch. This does not include buffer latches or transaction mark latches. A break of latch_* waits is available in sys.dm_os_latch_stats. Notice that sys.dm_os_latch_stats groups LATCH_NL, LATCH_SH, LATCH_UP, LATCH_EX, and LATCH_DT waits together.
|
See LATCH_x
|
LAZYWRITER_SLEEP
|
|
True
|
Occurs when lazy writer tasks are suspended. In a measure of the time that is spent by background tasks that are waiting. Do not consider this state when you are looking for user stalls.
|
|
LCK_x
|
|
|
Possible transaction management issue.
-
For shared locks, check Isolation level for transaction.
-
Keep transaction as short as possible
|
See SQL Locks performance counters
Hint: check for memory pressure, which causes more physical IO, therefore prolonging the duration of transactions and locks.
|
LCK_M_BU
|
|
|
Occurs when a task is waiting to acquire a Bulk update lock. See the sys.dm_tran_locks topc for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_IS
|
|
|
Occurs when a task is waiting to acquire an Intend Share lock. See the sys.dm_tran_locks topc for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_IU
|
|
|
Occurs when a task is waiting to acquire an Intend Update lock. See the sys.dm_tran_locks topc for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_IX
|
|
|
Occurs when a task is waiting to acquire an Intent Exclusive lock. See the sys.dm_tran_locks topc for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_RIn_NL
|
|
|
Occurs when a task is waiting to acquire a NULL lock on the current key value and an insert range lock between the current and previous key. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_RIn_S
|
|
|
Occurs when a task is waiting to acquire a shared lock on the current key value and an insert range lock between the current and previous key. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_RIn_U
|
|
|
Occurs when a task is waiting to acquire an Update lock on the current key value and an insert range lock between the current and previous key. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_RIn_X
|
|
True
|
Occurs when a task is waiting to acquire an exclusive lock on the current key value and an insert range lock between the current and previous key. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_RS_S
|
|
True
|
Occurs when a task is waiting to acquire a Shared lock on the current key value and a shared range lock between the current and previous key. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_RS_U
|
|
True
|
Occurs when a task is waiting to acquire a Update Range lock on the current key value and a shared range lock between the current and previous key. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_RX_S
|
|
True
|
Occurs when a task is waiting to acquire a Shared lock on the current key value and an Exclusive Range lock between the current and previous key. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_RX_U
|
|
True
|
Occurs when a task is waiting to acquire an Update lock on the current key value and an Exclusive range lock between the current and previous key. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_RX_X
|
|
True
|
Occurs when a task is waiting to acquire an Exclusive lock on the current key value and an Exclusive Range lock between the current and previous key. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_S
|
|
True
|
Occurs when a task is waiting to acquire a Shared lock. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_SCH_M
|
|
True
|
Occurs when a task is waiting to acquire a Schema Modify lock. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_SCH_S
|
|
True
|
Occurs when a task is waiting to acquire a Schema Modify lock. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_SIU
|
|
True
|
Occurs when a task is waiting to acquire a Shared With Intent Updated lock. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_SIX
|
|
True
|
Occurs when a task is waiting to acquire a Shared With Intent Exclusive lock. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_U
|
|
True
|
Occurs when a task is waiting to acquire an Update lock. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_UIX
|
|
True
|
Occurs when a task is waiting to acquire an Update With Intent Exclusive lock. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LCK_M_X
|
|
True
|
Occurs when a task is waiting to acquire an Exclusive lock. See the sys.dm_tran_locks topic for a lock compatibility matrix.
|
See Lck_x
|
LOGBUFFER
|
|
True
|
Occurs when a task is waiting for space in the log buffer to store a log record. Consistently high values can indicate that the log devices cannot keep up with the logging information being generated by the server.
|
See Disk performance counters:
-
Disk sec/read
-
Disk sec/write
-
Disk queues
|
LOGMGR
|
|
True
|
Occurs when a task is waiting for any outstanding log I/Os to finish before it shuts down the log.
Identify disk bottlenecks, by using Performance Counters, Profiler,
sys.dm_io_virtual_file_stats and SHOWPLAN
Any of the following reduces these waits:
-
Adding additional IO bandwidth,
-
Balancing IO across other drives
-
Moving / Isolating the transaction log on its own drive
|
See Disk performance counters:
-
Disk sec/read
-
Disk sec/write
-
Disk queues
See SQL Buffer Manager performance counters:
-
Page Life Expectancy
-
Checkpoint pages/sec
-
Lazy writes/sec
Check Io_stall for tranlog
-
select * from sys.dm_io_virtual_file_stats(dbid,file#)
|
LOGMGR_FLUSH
|
|
True
|
Internal Only.
|
|
LOGMGR_RESERVE_APPEND
|
|
True
|
Occurs when a task is waiting to see whether log truncation frees log space to enable the task to write a new log record. Consider increasing the size of the log file(s) for the affected database to reduce this wait.
|
|
LOWFAIL_MEMMGR_QUEUE
|
|
True
|
Occurs while waiting for memory to be available for use.
|
|
MIRROR_SEND_MESSAGE
|
|
True
|
Internal Only.
|
|
MISCELLANEOUS
|
|
True
|
Catch all wait type
|
|
MSQL_DQ
|
|
True
|
Occurs when a task is waiting for a distributed query operation to finish. This is used to detect potential Multiple Active Result Set (MARS) application deadlocks. The wait ends when the distributed query call finishes.
|
|
MSQL_SYNC_PIPE
|
|
True
|
Internal Only.
|
|
MSQL_XACT_MGR_MUTEX
|
|
True
|
Occurs when a task is waiting to obtain ownership of the session transaction manager to perform a session level transaction operation
|
|
MSQL_XACT_MUTEX
|
|
True
|
Occurs during synchronization of usage of a transaction. A request must successfully acquire the mutex before it can use the transaction.
|
|
MSQL_XP
|
|
True
|
Occurs when a task is waiting for an extended stored procedure to end. SQL Server uses this wait state to detect potential MARS application deadlocks. The wait stops when the extended stored procedure call ends.
|
|
MSSEARCH
|
|
True
|
Occurs during Full-Text search calls. This wait ends when the full-text operation is finished. It does not indicate contention, but the duration of full-text operations.
|
|
NET_WAITFOR_PACKET
|
|
True
|
Occurs when a connection is waiting for a network packet during a network read.
|
|
OLEDB
|
|
|
Occurs when SQL Server calls the Microsoft SQL Native Client OLE DB Provider. This state is not used for synchronization, instead it indicates the duration of calls to the OLE DB provider. It can also include the following:
Linked server calls including four part name calls, remote procedure calls, openquery, openrowset and so on.
Queries that access DMVs, because these are implemented as OLE DB rowset providers.
Heavy Profiler tracing
| -
Check placement of client applications including any file input read by the client and SQL Server data and log files. See PERFMON disk secs/read and disk secs/write. If disk secs/read are high, you can add IO bandwidth, balance IO across other drives, and move or isolate the database and transaction log to its own drives
-
Inspect Transact-SQL code for RPC, Distributed (Linked Server) and Full Text Search. Although SQL Server supports these type queries, they are sometimes performance bottlenecks.
-
To retrieve the SQL statement involved in OLE DB waits, refer to section “Retrieving statements in the waiter list”.
|
PAGEIOLATCH_x
|
|
|
Latches are short term synchronization objects. used to synchronize access to buffer pages. PageIOLatch is used for disk to memory transfers.
|
If this is significant in percentage, it typically suggests disk IO subsystem issues. Check disk counters.
|
PAGEIOLATCH_DT
|
|
True
|
Occurs when a task is waiting for a latch for a buffer that is in an I/O request. The latch request is in Destroy mode. Long waits of this kind indicate a problem with the disk subsystem.
|
See PAGEIOLATCH_x
|
PAGEIOLATCH_EX
|
|
True
|
Occurs when a task is waiting for a latch for a buffer that is in an I/O request. The latch request is in Exclusive mode. Long waits of this kind indicate a problem with the disk subsystem.
|
See PAGEIOLATCH_x
|
PAGEIOLATCH_KP
|
|
True
|
Occurs when a task is waiting for a latch for a buffer that is in an I/O request. The latch request is in Keep mode. Long waits of this kind indicate a problem with the disk subsystem.
|
See PAGEIOLATCH_x
|
PAGEIOLATCH_NL
|
|
True
|
Internal Only.
|
See PAGEIOLATCH_x
|
PAGEIOLATCH_SH
|
|
|
Occurs when a task is waiting for a latch for a buffer that is in an I/O request. The latch request is in Shared mode. Long waits of this kind indicate a problem with the disk subsystem.
|
See PAGEIOLATCH_x
|
PAGEIOLATCH_UP
|
|
|
Occurs when a task is waiting for a latch for a buffer that is in an I/O request. The latch request is in Update mode. Long waits of this kind indicate a problem with the disk subsystem.
|
See PAGEIOLATCH_x
|
PAGELATCH_x
|
|
|
Latches are short term light weight synchronization objects. Latches are not held for the duration of a transaction. Typical latching operations during row transfers to memory, controlling modifications to row offset table, and so on. Therefore, the duration of latches is typically sensitive to available memory.
|
If this is significant in percentage, it typically indicates cache contention.
|
PAGELATCH_DT
|
|
True
|
Occurs when a task is waiting for a latch for a buffer that is not in an I/O request. The latch request is in Destroy mode.
|
See PAGELATCH_x
|
PAGELATCH_EX
|
|
True
|
Occurs when a task is waiting for a latch for a buffer that is not in an I/O request. The latch request is in Exclusive mode.
Contention can be caused by issues other than IO or memory performance, for example, heavy concurrent inserts into the same index range can cause this kind of contention. If many inserts must be added on the same page, they are serialized using the latch. Lots of inserts into the same range can also cause page splits in the index which holds onto the latch while allocating a new page (this can take time). Any read accesses to the same range as the inserts would also conflict on the latches. The solution in these cases is to distribute the inserts using a more appropriate index.
|
See PAGELATCH_x
|
PAGELATCH_KP
|
|
True
|
Occurs when a task is waiting for a latch for a buffer that is not in an I/O request. The latch request is in Keep mode.
|
See PAGELATCH_x
|
PAGELATCH_NL
|
|
True
|
Internal Only.
|
See PAGELATCH_x
|
PAGELATCH_SH
|
|
True
|
Occurs when a task is waiting for a latch for a buffer that is not in an I/O request. The latch request is in Shared mode.
Contention can be caused by issues other than IO or memory performance, for example, heavy concurrent inserts into the same index range can cause this kind of contention. If many inserts must be added on the same page, they are serialized using the latch. Lots of inserts into the same range can also cause page splits in the index which holds onto the latch while allocating a new page (this can take a time). Any read accesses to the same range as the inserts would also conflict on the latches. The solution in these cases is to distribute the inserts using a more appropriate
|
See PAGELATCH_x
|
PAGELATCH_UP
|
|
True
|
Occurs when a task is waiting for a latch for a buffer that is not in an I/O request. The latch request is in Update mode.
Page latch Update is used only for allocation related pages, and contention on it is frequently a sign that more files are needed. With multiple files, allocations can be distributed across multiple files therefore reducing demand on the per-file data structures stored on these pages. The contention is not IO performance, but internal allocation contention to access the pages. Adding more spindles to a file or moving the file to a faster disk does not help, nor does adding more memory.
|
See PAGELATCH_x
|
PRINT_ROLLBACK_PROGRESS
|
|
|
Used to wait while user processes are ended in a database that has been transitioned by using the ALTER DATABASE termination clause. For more information, see ALTER DATABASE (Transact-SQL).
|
|
QNMANAGER_ACQUIRE
|
|
|
Internal Only.
|
|
QPJOB_KILL
|
|
|
Indicates that an asynchronous automatic statistics update was canceled by a call to KILL as the update was starting to run. The terminating thread is suspended, waiting for it to start listening for KILL commands. A good value is less than one second.
|
|
QPJOB_WAITFOR_ABORT
|
|
|
Indicates that an asynchronous automatic statistics update was canceled by a call to KILL when it was running. The update has now completed but is suspended until the terminating thread message coordination is finished. This is an ordinary but rare state, and should be very short. A good value is less than one second.
|
|
QRY_MEM_GRANT_INFO_MUTEX
|
|
True
|
Occurs when Query Execution memory management tries to control access to static grant information list. This state lists information about the current granted and waiting memory requests. This state is a simple access control state. There should never be a long wait for this state. If this mutex is not released, all new memory-using queries will stop responding.
|
|
QUERY_NOTIFICATION_MGR_MUTEX
|
|
True
|
Occurs during synchronization of the garbage collection queue in the Query Notification Manager.
|
|
QUERY_NOTIFICATION_SUBSCRIPTION_MUTEX
|
|
True
|
Occurs during state synchronization for transactions in Query Notifications.
|
|
QUERY_NOTIFICATION_TABLE_MGR_MUTEX
|
|
True
|
Occurs during internal synchronization within the Query Notification Manager.
|
|
QUERY_NOTIFICATION_UNITTEST_MUTEX
|
|
True
|
Internal Only.
|
|
QUERY_OPTIMIZER_PRINT_MUTEX
|
|
False
|
Occurs during synchronization of production of query optimizer diagnostic output. This wait type only occurs if diagnostic settings have been enabled under direction of Microsoft Product Support.
|
|
QUERY_TRACEOUT
|
|
True
|
Internal Only.
|
|
RECOVER_CHANGEDB
|
|
True
|
Occurs during synchronization of database warm standby databases.
|
|
REPL_CACHE_ACCESS
|
|
True
|
Occurs during synchronization on a replications article cache. During these waits the replication log reader stalls and DDL on a published table is blocked.
|
|
REPL_SCHEMA_ACCESS
|
|
Yes
|
Occurs during synchronization on a replications article cache. During these waits the replication log reader stalls and DDL on a published table is blocked
|
|
REPLICA_WRITES
|
|
True
|
Occurs while a task waits for page writes to database snapshots or DBCC replicas to finish.
|
|
REQUEST_DISPENSER_PAUSE
|
|
|
Occurs when a task is waiting for all outstanding I/O to complete so that I/O to a file can be frozen for snapshot backup.
|
|
RESOURCE_QUEUE
|
|
|
Occurs during synchronization on various internal resource queues.
|
Synchronization object
|
RESOURCE_SEMAPHORE
|
|
True
|
Occurs when a query memory request cannot be granted immediately because of other concurrent queries. High waits and wait times can indicate excessive number of concurrent queries or excessive memory request amount.
COMMON for DSS like workload and large queries such as hash joins; must wait for memory quota (grant) before it is executed.
|
See SQL Memory Mgr performance counters
-
Memory Grants Pending
-
Memory Grants Outstanding
|
RESOURCE_SEMAPHORE_MUTEX
|
|
True
|
Occurs while a query waits for its request for a thread reservation to be fulfilled. It also occurs when synchronizing query compile and memory grant requests
|
|
RESOURCE_SEMAPHORE_QUERY_COMPILE
|
|
True
|
Occurs when the number of concurrent query compiles hit a throttling limit in order to avoid over-burdening the system with compiles. High waits and wait times can indicate of excessive compilations, recompiles or uncachable plans.
|
|
RESOURCE_SEMAPHORE_SMALL_QUERY
|
|
True
|
Occurs when memory request by small query cannot be granted immediately because of other concurrent queries. Wait time should not exceed several seconds because the server transfers the request to the mainquery memory pool if it cannot grant the requested memory within a few seconds. High waits can indicate too many concurrent small queries when the main memory pool is blocked by waiting queries.
|
|
SEC_DROP_TEMP_KEY
|
|
True
|
Occurs after failed attempt to drop a temporary security key before a retry attempt.
|
|
SERVER_IDLE_CHECK
|
|
True
|
Occurs during synchronization of an instance of SQL Server idle status when a resource monitor is trying to declare an instance of SQL Server as idle or trying wake it up.
|
|
SLEEP_BPOOL_FLUSH
|
|
True
|
Occurs during checkpoints when checkpoint is throttling the issuing of new I/Os in order to avoid flooding the disk subsystem.
|
|
SLEEP_SYSTEMTASK
|
|
True
|
Occurs during start of background task while waiting for tempdb to complete startup.
|
|
SLEEP_TASK
|
|
True
|
Occurs when a task sleeps while waiting for a generic event to occur.
|
|
SNI_HTTP_ACCEPT
|
|
True
|
Internal Only.
|
|
SNI_HTTP_WAITFOR_0_DISCON
|
|
True
|
Occurs during SQL Server shutdown while waiting for outstanding http connections to exit.
|
|
SOAP_READ
|
|
True
|
Occurs when waiting for an HTTP network read to finish.
|
|
SOAP_WRITE
|
|
True
|
Occurs when waiting for an HTTP network write to finish.
|
|
SOS_CALLBACK_REMOVAL
|
|
True
|
Occurs when synchronization on a callback list in order to remove a callback. It is not expected for this counter to change after server initialization is completed
|
|
SOS_LOCALALLOCATORLIST
|
|
True
|
Occurs during internal synchronization in the SQL Server memory manager.
|
|
SOS_OBJECT_STORE_DESTROY_MUTEX
|
|
True
|
Occurs during internal synchronization in memory pools when destroying objects from the pool
|
|
SOS_PROCESS_AFFINITY_MUTEX
|
|
True
|
Occurs during synchronizing of access to process affinity settings
|
|
SOS_RESERVEDMEMBLOCKLIST
|
|
True
|
Occurs during internal synchronization in the SQL Server memory manager.
|
|
SOS_SCHEDULER_YIELD
|
|
True
|
Occurs when a task voluntarily yields the scheduler for other tasks to execute. During this wait the task is waiting for its quantum to be renewed.
|
|
SOS_STACKSTORE_INIT_MUTEX
|
|
True
|
Occurs during synchronization of internal store initialization.
|
|
SOS_SYNC_TASK_ENQUEUE_EVENT
|
|
True
|
Occurs when a task is started in a synchronous manner. Most tasks in SQL Server 2005 are started in an asynchronous manner and control returns to the starter immediately after the task request has been put on the work queue.
|
|
SOS_VIRTUALMEMORY_LOW
|
|
True
|
Occurs when a memory allocation waits for a resource manager to free virtual memory.
|
|
SOSHOST_EVENT
|
SOS
|
True
|
Occurs when a hosted component, such as CLR, waits for a SQL Server 2005 event synchronization object.
|
|
SOSHOST_INTERNAL
|
SOS
|
True
|
Occurs during synchronization of memory manager callbacks used by hosted components, such as CLR.
|
|
SOSHOST_MUTEX
|
SOS
|
True
|
Occurs when a hosted component, such as CLR, waits for a SQL Server 2005 mutex synchronization
|
|
SOSHOST_RWLOCK
|
SOS
|
True
|
Occurs when a hosted component, such as CLR, waits for a SQL Server 2005 reader-writer synchronization
|
|
SOSHOST_SEMAPHORE
|
SOS
|
True
|
Occurs when a hosted component, such as CLR, waits for a SQL Server 2005 semaphore synchronization object
|
|
SOSHOST_SLEEP
|
SOS
|
True
|
Occurs when a hosted task sleeps when waiting for a generic event to occur Hosted tasks are used by hosted components such as CLR.
|
|
SOSHOST_TRACELOCK
|
SOS
|
True
|
Occurs during synchronization of access to trace streams.
|
|
SOSHOST_WAITFORDONE
|
SOS
|
True
|
Occurs when a hosted component, such as CLR, waits for a task to finish.
|
|
SQLCLR_APPDOMAIN
|
CLR
|
True
|
Occurs while CLR waits for an application domain to complete startup
|
|
SQLCLR_ASSEMBLY
|
CLR
|
True
|
Occurs while waiting for access to the loaded assembly list in the sql appdomain
|
|
SQLCLR_DEADLOCK_DETECTION
|
CLR
|
True
|
Occurs while CLR waits for deadlock detection to finish.
|
|
SQLCLR_QUANTUM_PUNISHMENT
|
CLR
|
True
|
Occurs when a CLR task is throttled because it has exceeded its execution quantum. This throttling is done in order to reduce the effect of this greedy task on other tasks.
|
|
SQLSORT_NORMMUTEX
|
|
True
|
Occurs during internal synchronization when initializing internal sorting structures.
|
|
SQLSORT_SORTMUTEX
|
|
True
|
Occurs during internal synchronization when initializing internal sorting structures.
|
|
SQLTRACE_BUFFER_FLUSH
|
|
True
|
Occurs when the SQL Trace flush task pauses between flushes. This wait is expected and long waits do not indicate a problem
|
|
SQLTRACE_LOCK
|
|
True
|
Occurs during synchronization on trace buffers during a file trace.
|
|
SQLTRACE_SHUTDOWN
|
|
True
|
Occurs when a trace shutdown waits for outstanding trace events to finish
|
|
SQLTRACE_WAIT_ENTRIES
|
|
True
|
Occurs when a SQL Trace event queue waits for packets to arrive on the queue.
|
|
SRVPROC_SHUTDOWN
|
|
True
|
Occurs when the shutdown process waits for internal resources to be released to shutdown cleanly.
|
|
TEMPOBJ
|
|
True
|
Occurs when temporary object drops are synchronized. This wait is rare and only occurs if a task has requested exclusive access for temp table drops.
|
|
THREADPOOL
|
|
True
|
Occurs when a task is waiting for a worker to run on. This can indicate that the max worker setting is too low or that batch executions are taking unusually long therefore reducing the number of worker available to satisfy other batches.
|
|
TRAN_MARKLATCH_DT
|
|
True
|
Occurs when waiting for a destroy mode latch on a transaction mark latch. Transaction mark latches are used for synchronization of commits with marked transactions. Marked transaction enable restore to specific marked transactions.
|
|
TRAN_MARKLATCH_EX
|
|
True
|
Occurs when waiting for an exclusive mode latch on a transaction mark latch. Transaction mark latches are used for synchronization of commits with marked transactions. Marked transaction enable restore to specific marked transactions.
|
|
TRAN_MARKLATCH_KP
|
|
True
|
Occurs when waiting for a keep mode latch on a transaction mark latch. Transaction mark latches are used for synchronization of commits with marked transactions. Marked transactions enable restore to specific marked transactions.
|
|
TRAN_MARKLATCH_NL
|
|
True
|
Internal Only.
|
|
TRAN_MARKLATCH_SH
|
|
True
|
Occurs when waiting for a share mode latch on a transaction mark latch. Transaction mark latches are used for synchronization of commits with marked transactions. Marked transactions enable restore to specific marked transactions.
|
|
TRAN_MARKLATCH_UP
|
|
True
|
Occurs when waiting for an update mode latch on a transaction mark latch. Transaction mark latches are used for synchronization of commits with marked transactions. Marked transactions enable restore to specific marked transactions.
|
|
TRANSACTION_MUTEX
|
|
True
|
Occurs during synchronization of access to a transaction by multiple batches.
|
|
UTIL_PAGE_ALLOC
|
|
True
|
Occurs when transaction log scans wait for memory to be available during memory pressure.
|
|
VIEW_DEFINITION_MUTEX
|
|
True
|
Occurs during synchronization on access to cached view definitions.
|
|
WAIT_FOR_RESULTS
|
|
True
|
Occurs when waiting for a query notification to be triggered.
|
|
WAITFOR
|
|
True
|
Occurs because of a WaitFor Transact-SQL statement. The duration of the wait is determined by the parameters to the statement. This is a user initiated wait.
|
Inspect Transact-SQL code for “waitfor delay” statement
|
WORKTBL_DROP
|
|
True
|
Occurs when pausing before retrying after a failed worktable drop.
|
|
WRITELOG
|
|
|
Occurs when waiting for a log flush to finish. Common operations that cause log flushes are checkpoints and transaction commits.
Identify disk bottlenecks, by using Performance Counters, Profiler, sys.dm_io_virtual_file_stats and SHOWPLAN
Any of the following reduces these waits:
-
Adding additional IO bandwidth,
-
Balancing IO across other drives
-
Moving or Isolating the transaction log on its own drive
|
See Disk performance counters:
-
Disk sec/read
-
Disk sec/write
-
Disk queues
See SQL Buffer Manager counters:
-
Page Life Expectancy
-
Checkpoint pages/sec
-
Lazy writes/sec
Check Io_stall for tranlog
-
select * from sys.dm_io_virtual_file_stats(dbid,file#)
|
XACT_OWN_TRANSACTION
|
|
True
|
Occurs when waiting to acquire ownership of a transaction.
|
|
XACT_RECLAIM_SESSION
|
|
True
|
Occurs when waiting for the current owner of a session to release ownership of the session.
|
|
XACTLOCKINFO
|
|
True
|
Occurs during synchronization of access to a transaction's list of locks. In addition to the transaction itself, a transactions list of locks is accessed by operations such as deadlock detection and lock migration during page splits.
|
|
XACTWORKSPACE_MUTEX
|
|
True
|
Occurs during synchronization of defections from a transactions in addition to the transfer of database locks between enlist members of a transaction.
|
|