SQL Server查询性能调优、捕捉和评估查询性能

SqlServer 专栏收录该内容
25 篇文章 0 订阅

http://www.boyd.cn/info_Print.asp?ArticleID=4416

一、优化的层次:
 
1、语句级别(包含索引)
 
2、系统级别:索引碎片、锁定、统计信息、系统参数配置、数据库设计
 
3、底层级别:硬件、网络
 
 
 
二、SQL Server查询性能优化需要多种途径:
 
 1、数据库设计。这可能是影响查询性能和数据完整性最重要的因素了,设计决策会影响读取、修改的性能。
 
规范化的OLTP数据库关注数据库完整性、去除冗余、建立多个实体之间的关系,这是一个适合快速事务处理的设计。通常在规范化的OLTP设计中看到很多的表,这意味着在查询中要连接很多表。
 
另一方面,OLAP数据仓库设计经常使用非规范化的星形结构、雪花状结构,这些设计使用了中心事实表,它连接了2个或更多的描述维度表。对于雪花结构设计,维度表也可以存在于关联它的关系表上,这种设计的重点在于查询执行的速度而不是事务的快速更新。
 
2、适当的索引。
 
基于高优先级、频繁执行的查询来建立表索引。如果一个查询一天执行上千次且每次2秒完成,则可以通过适当的索引时每次运行时间少于1秒,增加这个索引可以显著减少SQL Server实例上的I/O压力。
 
应该根据需要建立索引,删除不用的索引。
 
表上的每个索引都会给数据修改操作增加开销,如果SQL Server使用低效率的索引甚至还会减慢查询的速度。在最初设计数据库的时候,索引最好少一些(当然,聚集索引、外键的非聚集索引还是要的)。在有需要的时候再增加索引,特别是在易变的、频繁更新的数据库中,索引需求是易变的,所以应该灵活、迭代的增加删除索引。
 
3、索引碎片。
 
由于长期的数据修改,索引会产生碎片。由于碎片的增多,数据会扩散到更多的数据页中。查询同样多数据需要检索的数据页也就会更多,IO需求就会更高,查询就会更慢。
 
4、系统参数配置。
 
包含了:数据库、SQL Server实例、操作系统配置。不适当的配置(比如启动了自动收缩、自动关闭数据库)会影响应用程序的性能。
 
 5、最新的统计信息。
 
AUTO_CREATE_STATISTICS数据库选项激活了SQL Server自动产生关于列中值的分布的统计信息。如果关闭此选项,统计信息就会过期。由于SQL Server依赖统计信息区决定如何执行查询,如果SQL Server基于过期的统计信息进行判断,那么可能会选择一个不太好的查询计划。
 
6、硬件。
 
当通过索引、修改语句的写法等都不能提高查询速度时,原因可能是结果集中的行太多、IO的限制,这时应该考虑把数据库迁移到更高配置的服务器上。对处理器体系结构、可用内存、磁盘系统的选择都会显著影响查询性能。
 
7、网络吞吐量。
 
获取查询结果所花的时间会受到缓慢的、不稳定的网络连接的影响,所以需要考虑这个潜在的影响因素。
 
 
 
 三、SQL Server查询性能最佳实践
 
1、在select查询中,只返回需要的列。查询中存在的列越少,则使用的IO和网络带宽就会越少。
 
 
 
2、在减少列的同时,也要考虑一下减少行。使用where子句来减少查询返回的行,不要让应用程序在只需显示前10行时,却返回10000行。
 
 
 
3、减少join次数。连接到单个查询中的每个表都会增加额外的开销。虽然具体join多少个表会收到数据库设计、容量大小以及用于关联查询的列的影响,但是短小查询有短小查询的好处。所以如果存储过程中有一个执行很长时间的非常大的查询,那么可以把这个查询分解为几个更小的中间结果,这通常会显著加快生成结果集的速度。
 
 
 
4、只在需要有序结果时,采用order by。大结果集的排序操作会导致额外开销。如果排序不是必须的那就不要排序。
 
 
 
5、避免在from、where、having子句中隐式数据类型的转换。当谓词中底层数据类型不匹配就会发生隐式数据类型转换,并且是由SQL Server自动转换的。比如,java应用程序发送unicode文本到非unicode列,对于每秒处理数百个事务的程序来说,隐式转换会增加处理时间。另外,隐式数据类型的转换可能会导致不能引用索引,导致查询性能下降。
 
 
 
6、如果唯一行不是必须的,那么就不要用distinct、union(而是用union all)。
 
 
 
7、当在游标和基本集合的方法之间进行选择时,最好选择集合方法。如果必须用游标,那么使用完后一定要尽快关闭和释放。
 
 
 
8、存储过程可以提升查询执行的稳定性(重用既有的查询计划),所以可以把一个查询封装到存储过程中,这样可能会提升性能。
 
 
 
9、应该避免使用嵌套视图。如果在创建视图时引用了其他视图,而这个创建的视图所引用的对象,在被调用的视图中已经被引用过了,那么由于查询的复杂性,这个重复和重叠经常会造成未优化的查询计划。
 
 
 
10、在复杂的数据库驱动的应用程序中,在某些情况下使用查询提示是必要的。不过,当底层的数据量、分布情况发生变化时,查询提示可能会覆盖SQL Server的决策处理,误导SQL Server做出最佳计划。
 
 
 
11、在开发数据库中,将有代表性的数据集填充到表中是非常重要的。也就是说应该把与实际生产环境中相当数量的有代表性的行填充到表中,不要在开发数据库内使用没有代表性的数据。SQL Server的性能非常依赖索引和统计信息,并且会基于表内实际的值做出决策。如果测试数据不是有代表性的较真实的数据,那么生产环境中的查询效果与测试中的效果会差异很大。
 
 
 
捕捉和评估查询性能
 
1、使用SYS.DM_EXEC_REQUESTS捕捉执行的查询

select r.session_id,  --会话id
       r.status,      --语句的状态:running,runnable,background,sleeping,suspended
       r.start_time,  --语句在服务器上开始运行的时间
       
       r.command,     --标识正在处理的命令的当前类型
                      --SELECT,INSERT,UPDATE,DELETE,
                      --BACKUP LOG,BACKUP DB,DBCC,WAITFOR
                      --内部系统进程将基于执行任务的类型来设置该命令
                      
       s.text         --执行的语句
from sys.dm_exec_requests r
cross apply sys.dm_exec_sql_text(r.sql_handle)s

2、使用T-SQL命令查看评估的查询执行计划

--显示估计的执行计划  
  
SET SHOWPLAN_TEXT ON  --显示估计的执行计划  
  
SET SHOWPLAN_ALL  ON  --显示估计的执行计划及统计信息、各种操作  
  
SET SHOWPLAN_XML  ON  --显示评估的执行计划及统计信息、各种操作  
                      --xml格式的执行计划,点击后会出现图形的执行计划  
select * from sys.objects  
  
  
--关闭估计的执行计划  
SET SHOWPLAN_TEXT OFF   
  
SET SHOWPLAN_ALL  OFF  
  
SET SHWOPLAN_XML  OFF 

3、查看执行运行时信息

--显示实际的执行计划及统计信息、各种操作  
SET STATISTICS PROFILE ON   
  
--显示xml格式的实际执行计划及统计信息  
SET STATISTICS XML     ON    
  
--显示分析、编译、执行批处理中所有语句所花费的时间,单位是毫秒  
SET STATISTICS TIME    ON    
  
--显示执行语句产生的磁盘活动统计信息,也就是IO信息  
SET STATISTICS IO      ON  
  
  
select * from sys.objects  
  
  
--关闭执行计划和统计信息  
SET STATISTICS PROFILE OFF  
  
SET STATISTICS XML     OFF  
  
SET STATISTICS TIME    OFF  
  
SET STATISTICS IO      OFF  
 

4、查看缓存的查询计划(各类语句:select,update,delete,insert等)的性能统计信息 
 
--从语句级别查看统计信息  
select rr.text,                      --执行的语句  
  
       --此计划自编译后在执行期间所执行的逻辑读取总次数  
       r.total_logical_reads,  
         
       --此计划自编译后在执行期间所执行的物理读取总次数          
       r.total_physical_reads,       
         
       --此计划自编译后在执行期间所执行的逻辑写入总次数         
       r.total_logical_writes,       
         
       --完成此计划的执行所占用的总时间,单位是微秒    
       r.total_elapsed_time,  
         
       --此计划自编译以来执行所用的CPU时间总量,单位是微秒    
       r.total_worker_time,  
         
       --计划自上次编译以来所执行的次数  
       r.execution_count,  
         
       --表示包含查询的批查询或存储过程的标记  
       r.sql_handle,  
         
       --对查询计算的二进制哈希值,用于标识具有类似逻辑的查询  
       r.query_hash,  
         
       --表示包含查询的编译计划的标记  
       r.plan_handle,  
         
       --对查询执行计划计算的二进制哈希值,用于标识类似的查询执行计划  
       r.query_plan_hash,  
         
       --用于在重新编译后区分不同计划实例的序列号  
       --查询语句中使用option(recompile)提示后会有显示  
       r.plan_generation_num  
from sys.dm_exec_query_stats r  
cross apply sys.dm_exec_sql_text(r.sql_handle) rr  
 
5、通过查询计划查看聚合的性能统计信息 
 
--从查询的哈希值或查询计划的哈希值级别,查看统计信息  
select r.query_hash,    --语句有差异,但是语句对应的hash值一样  
         
       COUNT(rr.text),  --查询次数  
         
       SUM(r.total_logical_reads),  --总的逻辑读次数  
       SUM(r.total_logical_writes)  --总的逻辑写次数  
from sys.dm_exec_query_stats r  
cross apply sys.dm_exec_sql_text(r.sql_handle) rr  
GROUP BY R.query_hash  
 
6、最大瓶颈

列名数据类型说明

wait_type

nvarchar(60)

等待类型的名称。

waiting_tasks_count

bigint

该等待类型的等待数。该计数器在每开始一个等待时便会增加。

wait_time_ms

bigint

该等待类型的总等待时间(毫秒)。该时间包括 signal_wait_time_ms。

max_wait_time_ms

bigint

该等待类型的最长等待时间。

signal_wait_time_ms

bigint

正在等待的线程从收到信号通知到其开始运行之间的时差。

等待类型说明

ABR

标识为仅供参考。不提供支持。不保证以后的兼容性。

ASSEMBLY_LOAD

在以独占的方式访问程序集加载时出现。

ASYNC_DISKPOOL_LOCK

当尝试同步并行的线程(执行创建或初始化文件等任务)时出现。

ASYNC_IO_COMPLETION

当某任务正在等待 I/O 完成时出现。

ASYNC_NETWORK_IO

当任务被阻止在网络之后时出现在网络写入中。验证客户端是否正在处理来自服务器的数据。

AUDIT_GROUPCACHE_LOCK

当等待控制对某个特殊缓存的访问的锁时出现。该缓存包含正在使用哪些审核来审核每个审核操作组的相关信息。

AUDIT_LOGINCACHE_LOCK

当等待控制对某个特殊缓存的访问的锁时出现。该缓存包含正在使用哪些审核来审核登录审核操作组的相关信息。

AUDIT_ON_DEMAND_TARGET_LOCK

当等待用于确保扩展事件目标相关审核的单一初始化的锁时出现。

AUDIT_XE_SESSION_MGR

当等待用于同步扩展事件会话相关审核的启动和停止的锁时出现。

BACKUP

当任务作为备份处理的一部分被阻止时出现。

BACKUP_OPERATOR

当任务正在等待磁带装入时出现。若要查看磁带状态,请查询 sys.dm_io_backup_tapes。如果装入操作没有挂起,则该等待类型可能指示磁带机发生硬件问题。

BACKUPBUFFER

在备份任务等待数据或等待用来存储数据的缓冲区时发生。此类型不常见,只有当任务等待装入磁带时才会出现。

BACKUPIO

在备份任务等待数据或等待用来存储数据的缓冲区时发生。此类型不常见,只有当任务等待装入磁带时才会出现。

BACKUPTHREAD

当某任务正在等待备份任务完成时出现。等待时间可能较长,从几分钟到几个小时。如果被等待的任务正处于 I/O 进程中,则该类型不指示发生问题。

BAD_PAGE_PROCESS

当后台可疑页记录器正在尝试避免每隔五秒以上的时间运行时出现。过多的可疑页会导致记录器频繁运行。

BROKER_CONNECTION_RECEIVE_TASK

在等待访问以便在连接端点上接收消息时出现。已序列化对端点的接收访问。

BROKER_ENDPOINT_STATE_MUTEX

当存在访问 Service Broker 连接端点状态的争用时出现。已序列化对更改状态的访问。

BROKER_EVENTHANDLER

当某任务正在 Service Broker 的主事件处理程序中等待时出现。出现时间应该非常短暂。

BROKER_INIT

当初始化每个活动数据库中的 Service Broker 时出现。该状态应当频繁出现。

BROKER_MASTERSTART

当某任务正在等待 Service Broker 的主事件处理程序启动时出现。出现时间应该非常短暂。

BROKER_RECEIVE_WAITFOR

当 RECEIVE WAITFOR 正在等待时出现。如果没有准备接收的消息,则通常出现该状态。

BROKER_REGISTERALLENDPOINTS

在初始化 Service Broker 连接端点的过程中出现。出现时间应该非常短暂。

BROKER_SERVICE

当与目标服务关联的 Service Broker 目标列表更新或重新设定优先顺序时出现。

BROKER_SHUTDOWN

当按计划关闭 Service Broker 时出现。该状态出现的时间应当尽量短暂。

BROKER_TASK_STOP

当 Service Broker 队列任务处理程序尝试关闭任务时出现。已序列化状态检查,并且必须预先处于运行状态。

BROKER_TO_FLUSH

当 Service Broker 惰性刷新器将内存中传输对象刷新到工作表时出现。

BROKER_TRANSMITTER

当 Service Broker 发送器正在等待工作时出现。

BUILTIN_HASHKEY_MUTEX

可能在实例启动之后而在初始化内部数据结构时出现。数据结构初始化之后将不会再次出现。

CHECK_PRINT_RECORD

标识为仅供参考。不提供支持。不保证以后的兼容性。

CHECKPOINT_QUEUE

当检查点任务正在等待下一个检查点请求时出现。

CHKPT

在服务器启动时出现以通知检查点线程可以启动。

CLEAR_DB

在执行会更改数据库状态的操作过程中发生,例如打开或关闭数据库。

CLR_AUTO_EVENT

当某任务当前正在执行公共语言运行时 (CLR) 执行并且正在等待特殊的自动事件启动时出现。通常会出现长时间等待,这并不意味着出现问题。

CLR_CRST

当某任务当前正在执行 CLR 执行并且正在等待输入当前由另一项任务正在使用的任务的关键部分时出现。

CLR_JOIN

当某任务当前正在执行 CLR 执行并且正在等待另一项任务结束时出现。当两任务之间具有联接时出现该等待状态。

CLR_MANUAL_EVENT

当某任务当前正在执行 CLR 执行并且正在等待特定手动事件启动时出现。

CLR_MEMORY_SPY

当为用于记录来自 CLR 的所有虚拟内存分配的数据结构等待获取锁时出现。如果存在并行访问,该数据结构将被锁定以维护其完整性。

CLR_MONITOR

当某任务当前正在执行 CLR 执行并且正在等待获取用于监视器的锁时出现。

CLR_RWLOCK_READER

当某任务当前正在执行 CLR 执行并且正在等待读取器锁时出现。

CLR_RWLOCK_WRITER

当某任务当前正在执行 CLR 执行并且正在等待编写器锁时出现。

CLR_SEMAPHORE

当某任务当前正在执行 CLR 执行并且正在等待信号量时出现。

CLR_TASK_START

在等待 CLR 任务完成启动时出现。

CLRHOST_STATE_ACCESS

当等待获取对 CLR 宿主数据结构的独占访问时出现。当设置或关闭 CLR 运行时时出现此等待类型。

CMEMTHREAD

当某任务正在等待线程安全内存对象时出现。当多项任务尝试分配来自同一个内存对象的内存而导致出现争用时,便可能延长等待时间。

CXPACKET

当尝试同步查询处理器交换迭代器时出现。如果针对该等待类型的争用成为问题时,可以考虑降低并行度。

CXROWSET_SYNC

在并行范围扫描期间出现。

DAC_INIT

当正在初始化专用管理员连接时出现。

DBMIRROR_DBM_EVENT

标识为仅供参考。不提供支持。不保证以后的兼容性。

DBMIRROR_DBM_MUTEX

标识为仅供参考。不提供支持。不保证以后的兼容性。

DBMIRROR_EVENTS_QUEUE

在数据库镜像等待处理事件时出现。

DBMIRROR_SEND

当某任务正在等待清除网络层的通信积压以便能够发送消息时出现。指示通信层正在开始重载并影响数据库镜像数据吞吐量。

DBMIRROR_WORKER_QUEUE

指示数据库镜像工作线程任务正在等待更多的工作。

DBMIRRORING_CMD

当某任务正在等待日志记录刷新到磁盘时出现。该等待状态应当保留较长的时间。

DEADLOCK_ENUM_MUTEX

在死锁监视器和 sys.dm_os_waiting_tasks 尝试确保 SQL Server 不同时运行多个死锁搜索时出现。

DEADLOCK_TASK_SEARCH

长时间等待此资源指示服务器正在 sys.dm_os_waiting_tasks 之上执行查询,并且这些查询正在阻止死锁监视器运行死锁搜索。该等待类型仅供死锁监视器使用。sys.dm_os_waiting_tasks 之上的查询使用 DEADLOCK_ENUM_MUTEX。

DEBUG

在 Transact-SQL 和 CLR 调试内部同步期间出现。

DISABLE_VERSIONING

当 SQL Server 轮询版本事务管理器,以查看最早的活动事务的时间戳是否晚于状态开始更改时的时间戳时出现。如果是,则所有在 ALTER DATABASE 语句运行之前启动的快照事务都已完成。当 SQL Server 通过 ALTER DATABASE 语句禁用版本控制时使用该等待状态。

DISKIO_SUSPEND

当某任务正在等待访问文件(外部备份处于活动状态)时出现。针对每个正在等待的用户进程报告该状态。每个用户进程大于五的计数可能指示外部备份需要太长时间才能完成。

DISPATCHER_QUEUE_SEMAPHORE

当调度程序池中的线程正在等待更多要处理的工作时出现。当调度程序处于空闲状态时,此等待类型的等待时间预计要增加。

DLL_LOADING_MUTEX

在等待 XML 分析器 DLL 加载时出现。

DROPTEMP

在上次尝试删除临时对象失败后再进行下次尝试之前出现。对于每一次失败的删除尝试,等待持续时间都以指数形式增长。

DTC

当某任务正在等待用于管理状态转换的事件时出现。该状态控制当 SQL Server 接收到 Microsoft 分布式事务处理协调器 (MS DTC) 服务不可用的通知之后执行 MS DTC 事务恢复的时间。

该状态还说明在 SQL Server 启动了 MS DTC 事务提交并且 SQL Server 正在等待 MS DTC 提交完成时进行等待的任务。

DTC_ABORT_REQUEST

当 MS DTC 工作线程会话正在等待获得 MS DTC 事务的所有权时,在该会话中出现。当 MS DTC 拥有了事务后,该会话可以回滚事务。通常,该会话将等待另一个正在使用事务的会话。

DTC_RESOLVE

当恢复任务正在等待跨数据库事务中的 master 数据库以查询该事务的结果时出现。

DTC_STATE

当某任务正在等待对内部 MS DTC 全局状态对象的更改进行保护的事件时出现。该状态应当保持非常短的时间。

DTC_TMDOWN_REQUEST

当 SQL Server 接收到 MS DTC 服务不可用的通知时,在 MS DTC 工作线程会话中出现。首先,工作线程将等待 MS DTC 恢复进程启动。然后,工作线程等待获取其正在处理的分布式事务的结果。此过程可能一直执行,直到重新建立与 MS DTC 服务的连接。

DTC_WAITFOR_OUTCOME

当恢复任务等待 MS DTC 处于活动状态以启用准备好的事务的解决方法时出现。

DUMP_LOG_COORDINATOR

当主任务正在等待子任务生成数据时出现。该状态通常不会出现。长时间的等待指示出现意外的阻塞。应当对子任务进行调查。

DUMPTRIGGER

标识为仅供参考。不提供支持。不保证以后的兼容性。

EC

标识为仅供参考。不提供支持。不保证以后的兼容性。

EE_PMOLOCK

在语句执行过程中特定的内存分配类型同步期间出现。

EE_SPECPROC_MAP_INIT

在对内部过程哈希表创建进行同步期间发生。此等待只能发生在 SQL Server 实例启动之后对哈希表的初始访问期间。

ENABLE_VERSIONING

当 SQL Server 在声明数据库可以转换到快照隔离允许的状态之前,等待该数据库中的所有更新事务完成时出现。当 SQL Server 通过 ALTER DATABASE 语句启用快照隔离时使用该状态。

ERROR_REPORTING_MANAGER

在对多个并发错误日志初始化进行同步期间发生。

EXCHANGE

在并行查询过程中查询处理器交换迭代器同步期间出现。

EXECSYNC

在并行查询过程中同步与交换迭代器无关的区域内的查询处理器期间出现。例如,此类区域包括位图、二进制大型对象 (LOB) 以及假脱机迭代器等。LOB 可能会经常使用该等待状态。

EXECUTION_PIPE_EVENT_INTERNAL

当同步通过连接上下文提交的批处理执行的创建器和使用者部件期间出现。

FAILPOINT

标识为仅供参考。不提供支持。不保证以后的兼容性。

FCB_REPLICA_READ

当同步快照(或 DBCC 创建的临时快照)稀疏文件的读取时出现。

FCB_REPLICA_WRITE

当同步快照(或 DBCC 创建的临时快照)稀疏文件的页推送或页请求时出现。

FS_FC_RWLOCK

当 FILESTREAM 垃圾收集器等待执行下列操作之一时出现:

  • 禁用垃圾收集(由备份和还原使用)。

  • 执行 FILESTREAM 垃圾收集器的一个周期。

FS_GARBAGE_COLLECTOR_SHUTDOWN

当 FILESTREAM 垃圾收集器等待清除任务完成时出现。

FS_HEADER_RWLOCK

当等待获取对 FILESTREAM 数据容器的 FILESTREAM 标头的访问,以便读取或更新 FILESTREAM 标头文件 (Filestream.hdr) 中的内容时出现。

FS_LOGTRUNC_RWLOCK

当等待获取对 FILESTREAM 日志截断的访问以执行下列操作之一时出现:

  • 临时禁用 FILESTREAM 日志 (FSLOG) 截断(由备份和还原使用)。

  • 执行 FSLOG 截断的一个周期。

FSA_FORCE_OWN_XACT

当 FILESTREAM 文件 I/O 操作需要绑定到关联的事务,但该事务当前由另一个会话拥有时出现。

FSAGENT

当 FILESTREAM 文件 I/O 操作等待的 FILESTREAM 代理资源正由另一个文件 I/O 操作使用时出现。

FSTR_CONFIG_MUTEX

当等待另一个 FILESTREAM 功能重新配置完成时出现。

FSTR_CONFIG_RWLOCK

当等待序列化对 FILESTREAM 配置参数的访问时出现。

FT_METADATA_MUTEX

标识为仅供参考。不提供支持。不保证以后的兼容性。

FT_RESTART_CRAWL

在全文爬网需要从上一个已知可用点重新启动以便从暂时故障中恢复时出现。等待使当前正在此总体中工作的工作线程任务完成或退出当前步骤。

FULLTEXT GATHERER

在同步全文操作期间发生。

GUARDIAN

标识为仅供参考。不提供支持。不保证以后的兼容性。

HTTP_ENUMERATION

在启动时出现,以枚举 HTTP 端点以启动 HTTP。

HTTP_START

当连接正在等待 HTTP 完成初始化时出现。

IMPPROV_IOWAIT

当 SQL Server 等待 Bulkload I/O 完成时出现。

INTERNAL_TESTING

标识为仅供参考。不提供支持。不保证以后的兼容性。

IO_AUDIT_MUTEX

在跟踪事件缓冲区同步期间出现。

IO_COMPLETION

在等待 I/O 操作完成时出现。通常,该等待类型表示非数据页 I/O。数据页 I/O 完成等待显示为 PAGEIOLATCH_* waits。

IO_RETRY

当 I/O 操作(例如读取磁盘或写入磁盘)由于资源不足而失败,然后重试时出现。

IOAFF_RANGE_QUEUE

标识为仅供参考。不提供支持。不保证以后的兼容性。

KSOURCE_WAKEUP

在等待来自服务控制管理器的请求期间由服务控制任务使用。可能会出现长时间等待,这并不指示出现问题。

KTM_ENLISTMENT

标识为仅供参考。不提供支持。不保证以后的兼容性。

KTM_RECOVERY_MANAGER

标识为仅供参考。不提供支持。不保证以后的兼容性。

KTM_RECOVERY_RESOLUTION

标识为仅供参考。不提供支持。不保证以后的兼容性。

LATCH_DT

等待 DT(破坏)闩锁时出现。它不包括缓冲区闩锁或事务标记闩锁。sys.dm_os_latch_stats 中提供了 LATCH_* waits 的列表。请注意,sys.dm_os_latch_stats 将 LATCH_NL、LATCH_SH、LATCH_UP、LATCH_EX 以及 LATCH_DT 等待分到一组。

LATCH_EX

等待 EX(排他)闩锁时出现。它不包括缓冲区闩锁或事务标记闩锁。sys.dm_os_latch_stats 中提供了 LATCH_* waits 的列表。请注意,sys.dm_os_latch_stats 将 LATCH_NL、LATCH_SH、LATCH_UP、LATCH_EX 以及 LATCH_DT 等待分到一组。

LATCH_KP

等待 KP(保持)闩锁时出现。它不包括缓冲区闩锁或事务标记闩锁。sys.dm_os_latch_stats 中提供了 LATCH_* waits 的列表。请注意,sys.dm_os_latch_stats 将 LATCH_NL、LATCH_SH、LATCH_UP、LATCH_EX 以及 LATCH_DT 等待分到一组。

LATCH_NL

标识为仅供参考。不提供支持。不保证以后的兼容性。

LATCH_SH

等待 SH(共享)闩锁时出现。它不包括缓冲区闩锁或事务标记闩锁。sys.dm_os_latch_stats 中提供了 LATCH_* waits 的列表。请注意,sys.dm_os_latch_stats 将 LATCH_NL、LATCH_SH、LATCH_UP、LATCH_EX 以及 LATCH_DT 等待分到一组。

LATCH_UP

等待 UP(更新)闩锁时出现。它不包括缓冲区闩锁或事务标记闩锁。sys.dm_os_latch_stats 中提供了 LATCH_* waits 的列表。请注意,sys.dm_os_latch_stats 将 LATCH_NL、LATCH_SH、LATCH_UP、LATCH_EX 以及 LATCH_DT 等待分到一组。

LAZYWRITER_SLEEP

当惰性编写器被挂起时出现。正在等待的后台任务所用时间的度量值。在查找用户阻隔点所时不要考虑该状态。

LCK_M_BU

当某任务正在等待获取大容量更新 (BU) 锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_IS

当某任务正在等待获取意向共享 (IS) 锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_IU

当某任务正在等待获取意向更新 (IU) 锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_IX

当某任务正在等待获取意向排他 (IX) 锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_RIn_NL

当某任务正在等待获取当前键值上的 NULL 锁以及当前键和上一个键之间的插入范围锁时出现。键上的 NULL 锁是指立即释放的锁。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_RIn_S

当某任务正在等待获取当前键值上的共享锁以及当前键和上一个键之间的插入范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_RIn_U

任务正在等待获取当前键值上的更新锁以及当前键和上一个键之间的插入范围锁。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_RIn_X

当某任务正在等待获取当前键值上的排他锁以及当前键和上一个键之间的插入范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_RS_S

当某任务正在等待获取当前键值上的共享锁以及当前键和上一个键之间的共享范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_RS_U

当某任务正在等待获取当前键值上的更新锁以及当前键和上一个键之间的更新范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_RX_S

当某任务正在等待获取当前键值上的共享锁以及当前键和上一个键之间的排他范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_RX_U

当某任务正在等待获取当前键值上的更新锁以及当前键和上一个键之间的排他范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_RX_X

当某任务正在等待获取当前键值上的排他锁以及当前键和上一个键之间的排他范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_S

当某任务正在等待获取共享锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_SCH_M

当某任务正在等待获取架构修改锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_SCH_S

当某任务正在等待获取架构共享锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_SIU

当某任务正在等待获取共享意向更新锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_SIX

当某任务正在等待获取共享意向排他锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_U

当某任务正在等待获取更新锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_UIX

当某任务正在等待获取更新意向排他锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LCK_M_X

当某任务正在等待获取排他锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。

LOGBUFFER

当某任务正在等待日志缓冲区的空间以存储日志记录时出现。连续的高值可能指示日志设备无法跟上服务器生成的日志量。

LOGGENERATION

标识为仅供参考。不提供支持。不保证以后的兼容性。

LOGMGR

在数据库关闭过程中,当某任务正在等待任何未完成的日志 I/O 在关闭日志之前完成时出现。

LOGMGR_FLUSH

标识为仅供参考。不提供支持。不保证以后的兼容性。

LOGMGR_QUEUE

在日志编写器任务等待工作请求时出现。

LOGMGR_RESERVE_APPEND

当某任务正在等待查看日志截断是否能释放日志空间以使该任务能写入新的日志记录时出现。请考虑为受影响的数据库增加日志文件的大小以减少该等待时间。

LOWFAIL_MEMMGR_QUEUE

在等待可用内存期间出现。

MISCELLANEOUS

标识为仅供参考。不提供支持。不保证以后的兼容性。

MSQL_DQ

当某任务正在等待分布式查询操作完成时出现。它用于检测潜在的多个活动的结果集 (MARS) 应用程序死锁。该等待将在分布式查询调用完成时结束。

MSQL_XACT_MGR_MUTEX

当某任务正在等待获取会话事务管理器的所有权以执行会话级别事务操作时出现。

MSQL_XACT_MUTEX

在事务使用同步期间出现。请求必须先获取互斥体才可以使用事务。

MSQL_XP

当某任务正在等待扩展存储过程结束时出现。SQL Server 使用该等待状态检测潜在的 MARS 应用程序死锁。该等待将在扩展存储过程调用结束时停止。

MSSEARCH

在全文搜索调用期间出现。该等待在全文操作完成时结束。它不指示争用,而指示全文操作的持续时间。

NET_WAITFOR_PACKET

在网络读取过程中连接正在等待网络数据包时出现。

OLEDB

在 SQL Server 调用 SQL Server Native Client OLE DB 访问接口时出现。该等待类型不用于同步。而是用于指示调用 OLE DB 访问接口的持续时间。

ONDEMAND_TASK_QUEUE

在后台任务等待高优先级系统任务请求时出现。长时间的等待指示一直没有要处理的高优先级请求,不应引起关注。

PAGEIOLATCH_DT

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“破坏”模式。长时间的等待可能指示磁盘子系统出现问题。

PAGEIOLATCH_EX

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“独占”模式。长时间的等待可能指示磁盘子系统出现问题。

PAGEIOLATCH_KP

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“保持”模式。长时间的等待可能指示磁盘子系统出现问题。

PAGEIOLATCH_NL

标识为仅供参考。不提供支持。不保证以后的兼容性。

PAGEIOLATCH_SH

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“共享”模式。长时间的等待可能指示磁盘子系统出现问题。

PAGEIOLATCH_UP

在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“更新”模式。长时间的等待可能指示磁盘子系统出现问题。

PAGELATCH_DT

在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“破坏”模式。

PAGELATCH_EX

在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“独占”模式。

PAGELATCH_KP

在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“保持”模式。

PAGELATCH_NL

标识为仅供参考。不提供支持。不保证以后的兼容性。

PAGELATCH_SH

在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“共享”模式。

PAGELATCH_UP

在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“更新”模式。

PARALLEL_BACKUP_QUEUE

在序列化由 RESTORE HEADERONLY、RESTORE FILELISTONLY 或 RESTORE LABELONLY 生成的输出时出现。

PREEMPTIVE_ABR

标识为仅供参考。不提供支持。不保证以后的兼容性。

PREEMPTIVE_AUDIT_ACCESS_EVENTLOG

在 SQL Server 操作系统 (SQLOS) 计划程序切换到抢先模式时发生,以便将审核事件写入 Windows 事件日志。

PREEMPTIVE_AUDIT_ACCESS_SECLOG

在 SQLOS 计划程序切换到抢先模式时发生,以便将审核事件写入 Windows 安全日志。

PREEMPTIVE_CLOSEBACKUPMEDIA

在 SQLOS 计划程序切换到抢先模式时发生,以便关闭备份介质。

PREEMPTIVE_CLOSEBACKUPTAPE

在 SQLOS 计划程序切换到抢先模式时发生,以便关闭磁带备份设备。

PREEMPTIVE_CLOSEBACKUPVDIDEVICE

在 SQLOS 计划程序切换到抢先模式时发生,以便关闭虚拟备份设备。

PREEMPTIVE_CLUSAPI_CLUSTERRESOURCECONTROL

在 SQLOS 计划程序切换到抢先模式时发生,以便执行故障转移群集操作。

PREEMPTIVE_COM_COCREATEINSTANCE

在 SQLOS 计划程序切换到抢先模式时发生,以便创建 COM 对象。

PREEMPTIVE_SOSTESTING

标识为仅供参考。不提供支持。不保证以后的兼容性。

PREEMPTIVE_STRESSDRIVER

标识为仅供参考。不提供支持。不保证以后的兼容性。

PREEMPTIVE_TESTING

标识为仅供参考。不提供支持。不保证以后的兼容性。

PREEMPTIVE_XETESTING

标识为仅供参考。不提供支持。不保证以后的兼容性。

PRINT_ROLLBACK_PROGRESS

用于等待用户进程在已通过 ALTER DATABASE 终止子句完成转换的数据库中结束。有关详细信息,请参阅 ALTER DATABASE (Transact-SQL)。

QPJOB_KILL

指示异步统计信息自动更新在开始运行时通过调用 KILL 命令而取消。终止线程处于挂起状态,等待它开始侦听 KILL 命令。正常情况下,该值不到一秒钟。

QPJOB_WAITFOR_ABORT

指示异步统计信息自动更新在运行时通过调用 KILL 命令而取消。目前更新已完成,但是在终止线程消息协调完成之前一直于挂起状态。这是一个普通而少见的状态,应当非常短暂。正常情况下,该值不到一秒钟。

QRY_MEM_GRANT_INFO_MUTEX

当查询执行内存管理尝试控制对静态授予信息列表的访问时出现。该状态列出当前已批准的内存请求以及正在等待的内存请求的有关信息。该状态是一个简单的访问控制状态。该状态始终不应当等待较长的时间。如果未释放互斥体,则所有占用内存的新查询都将停止响应。

QUERY_ERRHDL_SERVICE_DONE

标识为仅供参考。不提供支持。不保证以后的兼容性。

QUERY_EXECUTION_INDEX_SORT_EVENT_OPEN

当脱机创建索引生成以并行方式运行,并且正在排序的不同工作线程同步访问排序文件时出现。

QUERY_NOTIFICATION_MGR_MUTEX

在查询通知管理器中的垃圾收集队列同步期间出现。

QUERY_NOTIFICATION_SUBSCRIPTION_MUTEX

在查询通知中事务的状态同步期间出现。

QUERY_NOTIFICATION_TABLE_MGR_MUTEX

在查询通知管理器中的内部同步期间出现。

QUERY_NOTIFICATION_UNITTEST_MUTEX

标识为仅供参考。不提供支持。不保证以后的兼容性。

QUERY_OPTIMIZER_PRINT_MUTEX

在查询优化器诊断信息输出生成的同步期间出现。该等待类型仅在诊断设置已根据 Microsoft 产品支持的说明启用后出现。

QUERY_TRACEOUT

标识为仅供参考。不提供支持。不保证以后的兼容性。

QUERY_WAIT_ERRHDL_SERVICE

标识为仅供参考。不提供支持。不保证以后的兼容性。

RECOVER_CHANGEDB

在备用数据库中同步数据库状态期间出现。

REPL_CACHE_ACCESS

在同步复制项目缓存的期间出现。在这些等待期间,复制日志读取器将停止,已发布表中的数据定义语言 (DDL) 语句也将被阻止。

REPL_SCHEMA_ACCESS

在同步复制架构版本信息的期间出现。该状态在下列情况下存在:针对复制对象执行 DDL 语句时,以及日志读取器根据 DDL 出现次数生成或使用版本控制架构时。

REPLICA_WRITES

在任务等待将页写入数据库快照或 DBCC 副本的操作完成时出现。

REQUEST_DISPENSER_PAUSE

在任务等待所有未完成的 I/O 完成时出现,以便可以为快照备份冻结文件的 I/O。

REQUEST_FOR_DEADLOCK_SEARCH

在死锁监视器等待开始下一次死锁搜索时出现。在两次死锁检测之间可能出现该等待,长时间等待此资源并不指示出现问题。

RESMGR_THROTTLED

在有新请求传入并且基于 GROUP_MAX_REQUESTS 设置而中止时出现。

RESOURCE_QUEUE

在同步不同的内部资源队列期间出现。

RESOURCE_SEMAPHORE

当由于存在其他并发查询而无法立即批准查询内存请求时出现。等待时间较长或等待次数较多可能指示并发查询的数量过多或内存请求的数量过多。

RESOURCE_SEMAPHORE_MUTEX

在查询等待其保留线程的请求完成时出现。它也在同步查询编译和内存授予请求时出现。

RESOURCE_SEMAPHORE_QUERY_COMPILE

在并发查询编译的数量达到中止限制时出现。等待时间较长或等待次数较多可能指示编译、重新编辑或不可缓存的计划过多。

RESOURCE_SEMAPHORE_SMALL_QUERY

当由于存在其他并发查询而无法立即批准较小查询的内存请求时出现。等待时间不应超过几秒钟,因为如果服务器无法在几秒钟内给予请求的内存,则会将请求传输到主查询内存池中。等待时间较长可能指示当主内存池被等待的查询阻塞时并发小查询的数量过多。

SEC_DROP_TEMP_KEY

在尝试删除临时安全密钥失败之后并在重试之前出现。

SECURITY_MUTEX

当等待互斥体时出现,这些互斥体控制对可扩展的密钥管理 (EKM) 加密提供程序的全局列表以及 EKM 会话的会话作用域列表的访问。

SEQUENTIAL_GUID

当正在获取新的连续 GUID 时出现。

SERVER_IDLE_CHECK

当资源监视器正在尝试将 SQL Server 实例声明为空闲或正在尝试唤醒时,在 SQL Server 实例空闲状态的同步期间出现。

SHUTDOWN

在关闭语句等待活动连接退出时出现。

SLEEP_BPOOL_FLUSH

当检查点为了避免磁盘子系统泛滥而中止新 I/O 的发布时出现。

SLEEP_DBSTARTUP

在等待所有数据库恢复时数据库的启动期间出现。

SLEEP_DCOMSTARTUP

通常在等待 DCOM 初始化完成时 SQL Server 实例的启动期间出现。

SLEEP_MSDBSTARTUP

在 SQL 跟踪等待 msdb 数据库完成启动时出现。

SLEEP_SYSTEMTASK

在等待 tempdb 完成启动时后台任务的启动期间出现。

SLEEP_TASK

当任务在等待一般事件出现期间睡眠时出现。

SLEEP_TEMPDBSTARTUP

在任务等待 tempdb 完成启动时出现。

SNI_CRITICAL_SECTION

在 SQL Server 网络组件中进行内部同步期间出现。

SNI_HTTP_WAITFOR_0_DISCON

在等待未完成的 HTTP 连接退出的过程中 SQL Server 的关闭期间出现。

SNI_LISTENER_ACCESS

当等待非一致性内存访问 (NUMA) 节点更新状态更改时出现。已序列化对状态更改的访问。

SNI_TASK_COMPLETION

当在 NUMA 节点状态更改期间等待所有任务完成时出现。

SOAP_READ

在等待 HTTP 网络读取完成时出现。

SOAP_WRITE

在等待 HTTP 网络写入完成时出现。

SOS_CALLBACK_REMOVAL

在为了删除回调而对回调列表执行同步期间出现。服务器初始化完成之后,此计数器可能不会更改。

SOS_DISPATCHER_MUTEX

在调度程序池进行内部同步期间出现。包括调整该池时。

SOS_LOCALALLOCATORLIST

在 SQL Server 内存管理器中进行内部同步期间出现。

SOS_MEMORY_USAGE_ADJUSTMENT

在池之间调整内存使用情况时出现。

SOS_OBJECT_STORE_DESTROY_MUTEX

当破坏池中的对象时在内存池中进行内部同步期间出现。

SOS_PROCESS_AFFINITY_MUTEX

在同步访问进程关联设置期间出现。

SOS_RESERVEDMEMBLOCKLIST

在 SQL Server 内存管理器中进行内部同步期间出现。

SOS_SCHEDULER_YIELD

在任务自愿为要执行的其他任务生成计划程序时出现。在该等待期间任务正在等待其量程更新。

SOS_SMALL_PAGE_ALLOC

在分配和释放由某些内存对象管理的内存时出现。

SOS_STACKSTORE_INIT_MUTEX

在内部存储初始化同步期间出现。

SOS_SYNC_TASK_ENQUEUE_EVENT

在任务以同步方式启动时出现。SQL Server 中的大多数任务都以同步方式启动,在此方式中控制权在任务请求放置在工作队列之后立即返回到启动器。

SOS_VIRTUALMEMORY_LOW

在内存分配等待资源管理器释放虚拟内存时出现。

SOSHOST_EVENT

当宿主组件(如 CLR)在 SQL Server 事件同步对象中等待时出现。

SOSHOST_INTERNAL

在宿主组件(如 CLR)使用的内存管理器回调同步期间出现。

SOSHOST_MUTEX

当宿主组件(如 CLR)在 SQL Server 互斥体同步对象中等待时出现。

SOSHOST_RWLOCK

当宿主组件(如 CLR)在 SQL Server 读取器编写器同步对象中等待时出现。

SOSHOST_SEMAPHORE

当宿主组件(如 CLR)在 SQL Server 信号量同步对象中等待时出现。

SOSHOST_SLEEP

当宿主任务在等待一般事件出现期间睡眠时出现。宿主任务由宿主组件(如 CLR)使用。

SOSHOST_TRACELOCK

在同步访问跟踪流期间出现。

SOSHOST_WAITFORDONE

在宿主组件(如 CLR)等待任务完成时出现。

SQLCLR_APPDOMAIN

在 CLR 等待应用程序域完成启动时出现。

SQLCLR_ASSEMBLY

在等待访问 appdomain 中已加载的程序集列表时出现。

SQLCLR_DEADLOCK_DETECTION

在 CLR 等待死锁检测完成时出现。

SQLCLR_QUANTUM_PUNISHMENT

在 CLR 任务由于已经超过了其执行量程而中止时出现。此中止已完成,以便减小此大量消耗资源的任务对其他任务的影响。

SQLSORT_NORMMUTEX

在初始化内部排序结构时进行内部同步期间出现。

SQLSORT_SORTMUTEX

在初始化内部排序结构时进行内部同步期间出现。

SQLTRACE_BUFFER_FLUSH

当某任务正在等待后台任务将跟踪缓冲区每隔四秒刷新到磁盘时出现。

SQLTRACE_LOCK

在文件跟踪过程中同步跟踪缓冲区期间出现。

SQLTRACE_SHUTDOWN

在跟踪关闭等待未完成的跟踪事件完成时出现。

SQLTRACE_WAIT_ENTRIES

在 SQL 跟踪事件队列等待数据包到达队列时出现。

SRVPROC_SHUTDOWN

在关闭进程等待内部资源释放以完全关闭时出现。

TEMPOBJ

在临时对象删除同步时出现。该等待很少出现,仅在任务已请求 temp 表的独占访问删除时出现。

THREADPOOL

当某任务正在等待工作线程运行时出现。这可能指示最大工作线程数设置过低,或批处理执行时间过长,从而减少可满足其他批处理的工作线程数。

TIMEPRIV_TIMEPERIOD

在扩展事件计时器进行内部同步期间出现。

TRACEWRITE

当 SQL 跟踪行集跟踪提供程序等待可用缓冲区或可处理事件的缓冲区时出现。

TRAN_MARKLATCH_DT

在等待事务标记闩锁中的破坏模式闩锁时出现。事务标记闩锁用于同步提交与标记的事务。

TRAN_MARKLATCH_EX

在等待标记事务中的排他模式闩锁时出现。事务标记闩锁用于同步提交与标记的事务。

TRAN_MARKLATCH_KP

在等待标记事务中的保持模式闩锁时出现。事务标记闩锁用于同步提交与标记的事务。

TRAN_MARKLATCH_NL

标识为仅供参考。不提供支持。不保证以后的兼容性。

TRAN_MARKLATCH_SH

在等待标记事务中的共享模式闩锁时出现。事务标记闩锁用于同步提交与标记的事务。

TRAN_MARKLATCH_UP

在等待标记事务中的更新模式闩锁时出现。事务标记闩锁用于同步提交与标记的事务。

TRANSACTION_MUTEX

在同步多个批处理访问事务期间出现。

UTIL_PAGE_ALLOC

在内存不足期间事务日志扫描等待可用内存时出现。

VIA_ACCEPT

当在启动过程中完成虚拟接口适配器 (VIA) 提供程序连接时出现。

VIEW_DEFINITION_MUTEX

在同步访问已缓存的视图定义期间出现。

WAIT_FOR_RESULTS

在等待查询通知触发时出现。

WAITFOR

显示为 WAITFOR Transact-SQL 语句的结果。等待持续时间由此语句的参数确定。它是用户启动的等待。

WAITFOR_TASKSHUTDOWN

标识为仅供参考。不提供支持。不保证以后的兼容性。

WAITSTAT_MUTEX

在同步访问用于填充 sys.dm_os_wait_stats 的统计信息集期间出现。

WCC

标识为仅供参考。不提供支持。不保证以后的兼容性。

WORKTBL_DROP

在删除出现故障的工作表之后,重试之前的暂停期间出现。

WRITE_COMPLETION

当正在进行写操作时出现。

WRITELOG

等待日志刷新完成时出现。导致日志刷新的常见操作是检查点和事务提交。

XACT_OWN_TRANSACTION

在等待获取事务的所有权时出现。

XACT_RECLAIM_SESSION

在等待会话的当前所有者释放会话的所有权时出现。

XACTLOCKINFO

在同步访问事务锁列表期间出现。除事务本身之外,在页拆分过程中死锁检测和锁迁移等操作也可访问锁列表。

XACTWORKSPACE_MUTEX

在同步事务中的脱离以及事务登记成员之间的数据库锁数时出现。

XE_BUFFERMGR_ALLPROCESSED_EVENT

在扩展事件会话缓冲区刷新到目标时发生。此等待在后台线程上发生。

XE_BUFFERMGR_FREEBUF_EVENT

当下列任一条件成立时发生:

  • 扩展事件会话配置为无事件损失,且会话中的所有缓冲区当前已满。这表明扩展事件会话缓冲区太小,或应对其进行分区。

  • 审核遇到延迟。这表明写入审核的驱动器上存在磁盘瓶颈。

XE_DISPATCHER_CONFIG_SESSION_LIST

在使用异步目标的扩展事件会话启动或停止时发生。此等待表明发生了以下某一情况:

  • 扩展事件会话正在向后台线程池注册。

  • 后台线程池正在根据当前负荷计算需要的线程数量。

XE_DISPATCHER_JOIN

在用于扩展事件会话的后台线程终止时发生。

XE_DISPATCHER_WAIT

在用于扩展事件会话的后台线程等待事件缓冲区进行处理时发生。

XE_MODULEMGR_SYNC

标识为仅供参考。不提供支持。不保证以后的兼容性。

XE_OLS_LOCK

标识为仅供参考。不提供支持。不保证以后的兼容性。

XE_PACKAGE_LOCK_BACKOFF

标识为仅供参考。不提供支持。不保证以后的兼容性。

实例级别
--在SQL Server实例中执行线程提供所有发生等待的运行总和  
--每次重启之后或手动清除统计信息,那么会重新开始统计   
SELECT TOP 10  
      wait_type,  
      wait_time_ms  
FROM SYS.dm_os_wait_stats  
WHERE wait_type not in  
    (  
        'LAZYWRITER_SLEEP',  
        'SQLTRACE_BUFFER_FLUSH',  
        'REQUEST_FOR_DEADLOCK_SEARCH',  
          
        'LOGMGR_QUEUE',  
        'CHECKPOINT_QUEUE',  
          
        'CLR_AUTO_EVENT',  
        'SLEEP_TASK',  
          
        'BROKER_TO_FLUSH',  
        'BROKER_TASK_STOP',  
          
        'WIATFOR'  
    )  
ORDER BY wait_time_ms DESC    
  
  
--清空当前统计的等待类型信息  
--可以通过自定义的时间段,提供等待类型的统计信息  
DBCC SQLPERF('sys.dm_os_wait_stats',  
             'clear')  
go  
 

7、标识IO争用

--数据库-文件级别  
select DB_NAME(database_id),  
  
       file_name(file_id),  
         
       -- 该文件在磁盘上占用的字节数。  
       --对于稀疏文件,此数字是数据库快照在磁盘上所占用的实际字节数   
       size_on_disk_bytes,  
         
       sample_ms,         --自从计算机启动以来的毫秒数  
       io_stall_read_ms,  --用户等待文件中发出读取所用的总时间  
       io_stall_write_ms, --用户等待在该文件中完成写入所用的总时间  
       io_stall,          --用户等待在文件中完成 I/O 操作所用的总时间  
                          --为io_stall_read_ms+io_stall_write_ms  
         
       num_of_reads,         --在该文件中读取的次数  
       num_of_bytes_read,    --在该文件中读取的总字节数  
         
       num_of_writes,        --在该文件中写入的次数  
       num_of_bytes_written  --在该文件中写入的总字节数  
         
from sys.dm_io_virtual_file_stats(null,  --数据库id  
                                  null   --文件id  
                                 )   
order by io_stall desc  

  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 SQL Server 2008实战(SQL Server程序员和DBA不可或缺的权威参考手册) 基本信息 原书名: SQL Server 2008 Transact-SQL Recipes: A Problem-Solution Approach 原出版社: Apress 作者: (美)Joseph Sack 译者: 金迎春 丛书名: 图灵程序设计丛书 数据库 出版社:人民邮电出版社 ISBN:9787115221063 上架时间:2010-3-5 出版日期:2010 年2月 开本:16开 页码:713 版次:1-1 编辑推荐    SQL Server程序员和DBA不可或缺的权威参考手册    查询方便,迅速解决工作中的难题    大量来自微软内部的技巧 内容简介    t-sql一直以来都是 sql server编程的基础。和传统的 t-sql书籍不同,本书以独特的 “技巧 ”形式来介绍知识点,涵盖了数据处理(增删改、视图、索引、存储过程、触发器等)、数据应用(web服务、 clr集成、分布式查询等)和数据库配置(主体、安全、数据库镜像和快照、备份等)3个方面的内容。其中每一个技巧中都包含了有代表性的示例和精炼的解析。    本书实用、高效、技巧性强,适用于 sql server专业技术人员,也可供初学者学习参考。 作译者   Joseph Sack 世界知名的SQL Server技术专家,微软认证数据库管理员(MCDBA),有10多年的SQL Server开发和管理工作经验。目前就职于微软公司高级现场工程组(Premier Field Engineering team)。除本书外,他撰写的SQL Server 2000 Fast Answers for DBAs and Developers(即本书前身)是Amazon五星著作,与人合写的Pro SQL Server 2005也广受好评。他的博客地址是http://joesack.com/WordPress/。 目录 封面 -19 封底 -18 扉页 -17 版权 -16 版权声明 -15 译者序 -14 前言 -12 致谢 -11 目录 -10 第1章 SELECT 1 1.1 基本的SELECT语句 1 1.1.1 从表中选择指定列 2 1.1.2 从所有行中选择所有列 2 1.2 使用基本WHERE子句进行有选择的查询 3 1.2.1 使用WHERE子句指定结果集中返回的行 3 1.2.2 组合搜索条件 4 1.2.3 否定搜索条件 5 1.2.4 保持WHERE子句无歧义 5 1.3 使用运算符和表达式 6 1.3.1 在日期范围搜索中使用BETWEEN 7 1.3.2 使用比较运算符 8 1.3.3 检测NULL值 9 1.3.4 基于一组值返回行 9 1.3.5 LIKE和通配符结合使用 9 1.3.6 声明变量及为变量赋值 11 1.4 数据分组 12 1.4.1 使用GROUP BY子句 12 1.4.2 使用GROUP BY ALL 13 1.4.3 使用HAVING选择性地查询分组的数据 13 1.5 对结果排序 14 1.5.1 使用ORDER BY子句 15 1.5.2 在排序的结果中使用TOP关键字 16 1.6 SELECT子句技术 18 1.6.1 使用DISTINCT消除重复值 18 1.6.2 在聚合函数中使用DISTINCT 18 1.6.3 使用列别名 19 1.6.4 使用SELECT创建脚本 20 1.6.5 字符串拼接 21 1.6.6 使用SELECT创建逗号分隔的列表 21 1.6.7 使用INTO子句 22 1.7 子查询 23 1.8 从多个数据源查询 24 1.8.1 使用内联结 25 1.8.2 使用外联结 26 1.8.3 使用交叉联结 27 1.8.4 在同一查询中多次引用同一个表 27 1.8.5 使用衍生表 28 1.8.6 使用UNION组合结果集 29 1.9 使用APPLY来为每行用表值函数 30 1.9.1 使用CROSS APPLY 30 1.9.2 使用OUTER APPLY 32 1.10 数据源高级技术 33 1.10.1 使用TABLESAMPLE来返回随机行 33 1.10.2 使用PIVOT把单列值转化为多列和聚合数据 34 1.10.3 使用UNPIVOT
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值