MSSQL2005性能调优--DBA需掌握系统字典sql

  1. select  spid  ,a.status , hostname ,cpu   ,physical_io,blocked      ,plan_handle, qt.text ,[Query] = SUBSTRING (qt.text,   
  2.                                   b.statement_start_offset/2,   
  3.                                   (CASE WHEN b.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2   
  4.                                                                           ELSE b.statement_end_offset  
  5.                                    END - b.statement_start_offset)/2)  ,cmd        , b.wait_type, object_name(qt.objectid,qt.dbid) ObjectName    
  6.  ,a.dbid,a.request_id    
  7.  ,convert(sysname, rtrim(loginame))  as loginname ,spid as 'spid_sort' ,program_name     
  8.  , b.start_time    
  9.    from master.dbo.sysprocesses a, sys.dm_exec_requests  b  CROSS APPLY sys.dm_exec_sql_text(b.sql_handle)as qt   
  10.     where b.session_id = a.spid and a.status not in ('sleeping','background'order by physical_io desc  
  11.   
  12. --检测SQL查询的效率 语法【对IO和Time对SQL执行进行统计】:  
  13. --显示执行计划(CTRL+L),可查看查询语句使用了哪些索引     
  14. SET SHOWPLAN_TEXT ON   
  15. GO     
  16. --显示表扫描情况   
  17. SET STATISTICS IO ON   
  18. go  
  19.   
  20. SET STATISTICS TIME ON  
  21. go  
  22.   
  23. --注意:在检测之前要清理缓存,因为当我们执行SQL语句的时候查出的数据会在数据库中进行缓存,重新查询会返回缓存中的信息。  
  24.   
  25. DBCC DROPCLEANBUFFERS  
  26.   
  27. DBCC FREEPROCCACHE  
  28.   
  29. --sql 2005性能调优   
  30. --SQL Server在运行一段时间,随着数据的积累,SQL运行效率会逐步降低,为了使用业务系统正常动作,经常IT部门需要花高价请SQL调优专家来解决。其实调优也不复杂,主要是找到影响效率的SQL,然后对症下药,这里给出几个技巧,相信对大家非常实用。  
  31. --1、检查SQL阻塞原因  
  32. select blocking_session_id, wait_duration_ms, session_id  
  33.   from sys.dm_os_waiting_tasks  
  34.   where blocking_session_id is not null  
  35.   
  36. --显示累计最常重新编译的25个运行计划  
  37. select top 25     plan_generation_num,     SUBSTRING(qt.text,qs.statement_start_offset/2+1,          (case when qs.statement_end_offset = -1          then DATALENGTH(qt.text)          else qs.statement_end_offset end -qs.statement_start_offset)/2 + 1)          as stmt_executing,     qt.text,     execution_count,     sql_handle,     dbid,     db_name(dbid) DBName,     objectid,     object_name(objectid,dbid) ObjectName  from sys.dm_exec_query_stats as qs     Cross apply sys.dm_exec_sql_text(sql_handle) qt where plan_generation_num >1 order by plan_generation_num  
  38.   
  39. --显示累计最消耗 CPU 时间的前50个运行计划  
  40. SELECT TOP 50     total_worker_time/1000 AS [总消耗CPU 时间(ms)],execution_count [运行次数],   
  41.     qs.total_worker_time/qs.execution_count/1000. as [平均消耗CPU 时间(ms)],      
  42.  SUBSTRING(qt.text,qs.statement_start_offset/2+1,            
  43. (case when qs.statement_end_offset = -1          then DATALENGTH(qt.text)           
  44.  else qs.statement_end_offset end -qs.statement_start_offset)/2 + 1)      as [使用CPU的语法], qt.text [完整语法],      
  45.  qt.dbid, dbname=db_name(qt.dbid),     qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName  
  46.     FROM sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt ORDER BY         total_worker_time DESC  
  47.   
  48.   
  49. --显示锁定与被锁定之间的链状关系  
  50. select t1.resource_type as [信息锁定类型]     ,db_name(resource_database_id) as [数据库名]       
  51. ,t1.resource_associated_entity_id as [锁定的对象]     ,t1.request_mode as [等待者需求的锁定类型]     
  52.   ,t1.request_session_id as [等待者sid]       ,t2.wait_duration_ms as [等待时间]      
  53.    ,(select text from sys.dm_exec_requests as r           cross apply sys.dm_exec_sql_text(r.sql_handle)          
  54.   where r.session_id = t1.request_session_id) as [等待者要运行的批处理]     ,(select substring(qt.text,r.statement_start_offset/2+1,      
  55.           (case when r.statement_end_offset = -1              then datalength(qt.text)               
  56.  else r.statement_end_offset end - r.statement_start_offset)/2+1)           
  57.  from sys.dm_exec_requests as r         cross apply sys.dm_exec_sql_text(r.sql_handle) as qt         where r.session_id = t1.request_session_id) as [等待者正要运行的语法]      ,t2.blocking_session_id as [锁定者sid]       ,(select text from sys.sysprocesses as p                cross apply sys.dm_exec_sql_text(p.sql_handle)          where p.spid = t2.blocking_session_id) as [锁定者的语法]     from     sys.dm_tran_locks as t1,      sys.dm_os_waiting_tasks as t2 where     t1.lock_owner_address = t2.resource_address  
  58.   
  59.   
  60. --以sys.dm_exec_query_stats 动态管理查看查询最耗 IO 资源的 SQL 语法  
  61. select top 5  object_name(qt.objectid,qt.dbid) ObjectName, (total_logical_reads/execution_count) as [平均逻辑读取次数], (total_logical_writes/execution_count) as [平均逻辑写入次数], (total_physical_reads/execution_count) as [平均对象读取次数],  Execution_count 运行次数,  substring(qt.text,r.statement_start_offset/2+1,  (case when r.statement_end_offset = -1  then datalength(qt.text)  else r.statement_end_offset end - r.statement_start_offset)/2+1) [运行语法] from sys.dm_exec_query_stats  as r     cross apply sys.dm_exec_sql_text(r.sql_handle) as qt  order by  (total_logical_reads + total_logical_writes) Desc   
  62. --通过sys.dm_io_pending_io_requests系统查看和sys.dm_io_virtual_file_stats 动态管理函数监控是否有 IO 延迟的状况  
  63. select     db_name(i.database_id) db,      name,     physical_name,      io_stall /1000 [用户等待文件完成I/O 的总时间(以秒为单位)]   
  64. ,     io_type [I/O 要求的类型],     io_pending_ms_ticks [个别IO 在队列(Pending queue)等待的总时间]   
  65. from sys.dm_io_virtual_file_stats(NULLNULL) i join sys.dm_io_pending_io_requests as p on i.file_handle = p.io_handle join sys.master_files m On m.database_id=i.database_id and m.file_id=i.file_id   
  66.   
  67.   
  68. 2,-- 查看阻塞和锁  
  69. SELECT  
  70.   t1.request_session_id AS spid,  
  71.   t1.resource_type AS type,  
  72.   t1.resource_database_id AS dbid,  
  73.   (case resource_type  
  74.    WHEN 'OBJECT' THEN object_name(t1.resource_associated_entity_id)  
  75.    WHEN 'DATABASE' THEN ' '  
  76.    ELSE (SELECT object_name(object_id)  
  77.       FROM sys.partitions  
  78.       WHERE hobt_id=resource_associated_entity_id)  
  79.   ENDAS objname,  
  80.   t1.resource_description AS description,  
  81.   t1.request_mode AS mode,  
  82.   t1.request_status AS status,  
  83.    t2.blocking_session_id  
  84. FROM sys.dm_tran_locks AS t1 LEFT OUTER JOIN sys.dm_os_waiting_tasks AS t2  
  85. ON t1.lock_owner_address = t2.resource_address  
  86.   
  87. --2、检查前10个等待资源的SQL语句  
  88. select top 20 * from sys.dm_os_wait_stats  order by wait_time_ms desc  
  89.    
  90. --CXPACKET 并发线程  
  91. --并发线程可以使用的CPU数量  
  92. sp_configure 'max degree of parallelism', 4   
  93. GO  
  94.   
  95. --时间为XX秒以上才并发  
  96. sp_configure 'cost threshold for parallelism''25'  
  97. GO  
  98. RECONFIGURE WITH OVERRIDE  
  99. GO  
  100.   
  101. --在系统访问量比较大的时候,看一下suspend的进程等的什么资源  
  102. select b.* from sys.dm_os_waiting_tasks a, sys.dm_exec_requests b  
  103. where a.session_id=b.session_id and b.status='suspended                     '  
  104. order by wait_duration_ms desc  
  105.   
  106.   
  107. --执行下面的脚本看一下数据等待的原因  
  108. SELECT TOP 10  
  109.  [Wait type] = wait_type,  
  110.  [Wait time (s)] = wait_time_ms / 1000,  
  111.  [% waiting] = CONVERT(DECIMAL(12,2), wait_time_ms * 100.0   
  112.                / SUM(wait_time_ms) OVER()),  
  113.  waiting_tasks_count ,  
  114.  max_wait_time_ms ,  
  115.  signal_wait_time_ms                  
  116. FROM sys.dm_os_wait_stats  
  117. WHERE wait_type NOT LIKE '%SLEEP%'   
  118. ORDER BY wait_time_ms DESC;  
  119.   
  120. --第二确定那些语句编译是什么原因造成的,查看如下语句:   
  121.   
  122. select usecounts, cacheobjtype, objtype, bucketid, text   
  123.   from sys.dm_exec_cached_plans cp cross apply   
  124.    sys.dm_exec_sql_text(cp.plan_handle)   
  125.   where cacheobjtype = 'Compiled Plan'   
  126.    order by objtype   
  127.   
  128. select text, query_plan, requested_memory_kb, granted_memory_kb, used_memory_kb from sys.dm_exec_query_memory_grants MG  
  129. CROSS APPLY sys.dm_exec_sql_text(sql_handle)  t  
  130. CROSS APPLY sys.dm_exec_query_plan(MG.plan_handle)   
  131.   
  132. --第四 关于并行查询等待,查看相关并行等待的SQL,如果有必要对OLTP来讲,限制并行查询:  
  133. --dbcc inputbuffer(sid) 找出相关语句,使用maxdop提示限制并行查询。  
  134. select * from sys.dm_os_waiting_tasks where wait_type='CXPACKET'  
  135. dbcc inputbuffer(697)   
  136.   
  137. --过程使用的内存查询  
  138. select text, query_plan, requested_memory_kb, granted_memory_kb, used_memory_kb from sys.dm_exec_query_memory_grants MG  
  139. CROSS APPLY sys.dm_exec_sql_text(sql_handle)  t  
  140. CROSS APPLY sys.dm_exec_query_plan(MG.plan_handle)  
  141.   
  142. --查询正在等待的类型有哪些    
  143.  select * from sys.dm_os_waiting_tasks  
  144.  select * from sys.dm_os_wait_stats  order by wait_time_ms desc  
  145.  select top 20  * from sys.dm_os_latch_stats order by wait_time_ms desc  
  146.   
  147.   
  148. --3、查询显示 CPU 平均占用率最高的前50个SQL 语句  
  149. SELECT TOP 50 total_worker_time/execution_count AS [Avg CPU Time],  
  150. (SELECT SUBSTRING(text,statement_start_offset/2,(CASE WHEN      statement_end_offset = -1 then LEN(CONVERT(nvarchar(max), text)) * 2 ELSE statement_end_offset end -statement_start_offset)/2) FROM sys.dm_exec_sql_text(sql_handle)) AS query_text, *  
  151. FROM sys.dm_exec_query_stats  
  152. ORDER BY [Avg CPU TimeDESC  
  153.    
  154. --4、CPU 瓶颈通常由以下原因引起:查询计划并非最优、配置不当、设计因素不良或硬件资源不足。下面的常用查询可帮助您确定导致CPU瓶颈的原因。下面的查询使您能够深入了解当前缓存的哪些批处理或过程占用了大部分CPU资源。  
  155. SELECT   
  156.       total_cpu_time,   
  157.       total_execution_count,  
  158.       number_of_statements,  
  159.       s2.text  
  160.       --(SELECT SUBSTRING(s2.text, statement_start_offset / 2, ((CASE WHEN statement_end_offset = -1 THEN (LEN(CONVERT(NVARCHAR(MAX), s2.text)) * 2) ELSE statement_end_offset END) - statement_start_offset) / 2) ) AS query_text  
  161. FROM   
  162.       (SELECT TOP 50   
  163.             SUM(qs.total_worker_time) AS total_cpu_time,   
  164.             SUM(qs.execution_count) AS total_execution_count,  
  165.             COUNT(*) AS  number_of_statements,   
  166.             qs.sql_handle --,  
  167.             --MIN(statement_start_offset) AS statement_start_offset,   
  168.             --MAX(statement_end_offset) AS statement_end_offset  
  169.       FROM   
  170.             sys.dm_exec_query_stats AS qs  
  171.       GROUP BY qs.sql_handle  
  172.       ORDER BY SUM(qs.total_worker_time) DESCAS stats  
  173.       CROSS APPLY sys.dm_exec_sql_text(stats.sql_handle) AS s2  
  174.   
  175.  select text from sys.dm_exec_sql_text(0x03000500E26FC43AFA59EF007A9F00000100000000000000)  
  176.   
  177. --5、下面的查询显示缓存计划所占用的CPU总使用率(带 SQL 文本)。  
  178. SELECT  
  179. total_cpu_time,  
  180. total_execution_count,  
  181. number_of_statements,  
  182. s2.text  
  183. FROM  
  184. (SELECT TOP 50  
  185. SUM(qs.total_worker_time) AS total_cpu_time,  
  186. SUM(qs.execution_count) AS total_execution_count,  
  187. COUNT(*) AS  number_of_statements,  
  188. qs.sql_handle  
  189. FROM  
  190. sys.dm_exec_query_stats AS qs  
  191. GROUP BY qs.sql_handle  
  192. ORDER BY SUM(qs.total_worker_time) DESCAS stats  
  193. CROSS APPLY sys.dm_exec_sql_text(stats.sql_handle) AS s2  
  194.    
  195. --下面的查询显示哪个查询占用了最多的 CPU 累计使用率。   
  196.   
  197.   
  198. SELECT     highest_cpu_queries.plan_handle,     highest_cpu_queries.total_worker_time,    q.dbid,    q.objectid,    q.number,    q.encrypted,    q.[text]  
  199. --into #tb  
  200. from     (select top 50         qs.plan_handle,         qs.total_worker_time    
  201.   from         sys.dm_exec_query_stats qs    order by qs.total_worker_time descas highest_cpu_queries     
  202.  cross apply sys.dm_exec_sql_text(plan_handle) as q order by highest_cpu_queries.total_worker_time desc  
  203.   
  204.    
  205.   
  206. --6、下面的示例查询显示已重新编译的前 25 个存储过程。plan_generation_num 指示该查询已重新编译的次数。  
  207. select top 25  
  208. sql_text.text,  
  209. sql_handle,  
  210. plan_generation_num,  
  211. execution_count,  
  212. dbid,  
  213. objectid  
  214. from sys.dm_exec_query_stats a  
  215. cross apply sys.dm_exec_sql_text(sql_handle) as sql_text  
  216. where plan_generation_num > 1  
  217. order by plan_generation_num desc  
  218.    
  219. --7、效率较低的查询计划可能增大 CPU 占用率。下面的查询显示哪个查询占用了最多的 CPU 累计使用率。  
  220. SELECT  
  221. highest_cpu_queries.plan_handle, highest_cpu_queries.total_worker_time, q.dbid, q.objectid, q.number, q.encrypted, q.[text]  
  222. from  
  223. (select top 50 qs.plan_handle,  qs.total_worker_time from sys.dm_exec_query_stats qs  order by qs.total_worker_time descas highest_cpu_queries  
  224. cross apply sys.dm_exec_sql_text(plan_handle) as q  
  225. order by highest_cpu_queries.total_worker_time desc  
  226.    
  227. --8、下面的查询显示一些可能占用大量 CPU 使用率的运算符(例如 ‘%Hash Match%’、‘%Sort%’)以找出可疑对象。  
  228. select *  
  229. from  
  230. sys.dm_exec_cached_plans  
  231. cross apply sys.dm_exec_query_plan(plan_handle)  
  232. where  
  233. cast(query_plan as nvarchar(max)) like '%Sort%'  
  234. or cast(query_plan as nvarchar(max)) like '%Hash Match%'  
  235.    
  236. --9、如果已检测到效率低下并导致 CPU 占用率较高的查询计划,请对该查询中涉及的表运行 UPDATE STATISTICS 以查看该问题是否仍然存在。然后,收集相关数据并将此问题报告给 PerformancePoint Planning 支持人员。如果您的系统存在过多的编译和重新编译,可能会导致系统出现与 CPU 相关的性能问题。您可以运行下面的 DMV 查询来找出过多的编译/重新编译。  
  237. select * from sys.dm_exec_query_optimizer_info  
  238. where counter = 'optimizations' or counter = 'elapsed time'  
  239.   
  240. SELECT TOP 5 creation_time, last_execution_time, total_clr_time,  
  241.     total_clr_time/execution_count AS [Avg CLR Time], last_clr_time,  
  242.     execution_count,  
  243.     SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,  
  244.     ((CASE statement_end_offset  
  245.         WHEN -1 THEN DATALENGTH(st.text)  
  246.         ELSE qs.statement_end_offset END  
  247.             - qs.statement_start_offset)/2) + 1) as statement_text  
  248. FROM sys.dm_exec_query_stats as qs  
  249. CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as st  
  250. ORDER BY total_clr_time/execution_count DESC;  
  251.   
  252.   
  253. GO  
  254. SELECT     TOP 100 execution_count / datediff(second, creation_time, last_execution_time) AS [Execute Times Per Second], execution_count,   
  255. total_logical_reads /execution_count AS [Avg Logical Reads],  
  256. total_elapsed_time /execution_count AS [Avg Elapsed Time],  
  257. SUBSTRING(st.text, (qs.statement_start_offset / 2) + 1, ((CASE statement_end_offset WHEN - 1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset) / 2) + 1) AS statement_text  
  258. FROM         sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st  
  259. WHERE     execution_count > 100  
  260. ORDER BY 1 DESC;  
  261.   
  262.   
  263. SELECT     TOP 100 execution_count / datediff(second, creation_time, last_execution_time) AS [Execute Count Per Second], execution_count,  
  264. total_logical_reads /execution_count AS [Avg Logical Reads],  
  265. total_elapsed_time /execution_count AS [Avg Elapsed Time],  
  266. db_name(st.dbid) as [database name],  
  267. object_name(st.objectid, st.dbid) as [object name],  
  268. SUBSTRING(st.text, (qs.statement_start_offset / 2) + 1, ((CASE statement_end_offset WHEN - 1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset) / 2) + 1) AS statement_text  
  269. FROM         sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st  
  270. WHERE     execution_count > 100  
  271. ORDER BY 1 DESC;  
  272.   
  273.   
  274. select top 100  
  275. transaction_id,  
  276. transaction_sequence_num,  
  277. elapsed_time_seconds  
  278. from sys.dm_tran_active_snapshot_database_transactions  
  279. order by elapsed_time_seconds DESC   
  280.   
  281. --非 0 的值预示有任务需要等待时间切片来运行;这个数值高表明一个 CPU 瓶颈的征兆  
  282. select   
  283.     scheduler_id,   
  284.     current_tasks_count,   
  285.     runnable_tasks_count   
  286. from sys.dm_os_schedulers   
  287. where scheduler_id < 255   
  288.   
  289. --下列查询给你一个查看当前缓存中最耗费 CPU 的批或过程高级别视图  
  290. select top 50   
  291.     sum(qs.total_worker_time) as total_cpu_time,   
  292.     sum(qs.execution_count) as total_execution_count,   
  293.     count(*) as  number_of_statements,   
  294.     qs.plan_handle   
  295. from   
  296.     sys.dm_exec_query_stats qs   
  297. group by qs.plan_handle   
  298. order by sum(qs.total_worker_time) desc   
  299.   
  300. --以利用如下语句通过sql_handle和plan_handle来得到SQL语句和查询计划:  
  301.   
  302. select text from sys.dm_exec_sql_text(@sql_handle)  
  303. select * from sys.dm_exec_query_plan(@plan_handle)  
  304.   
  305. select * from sys.dm_exec_query_plan(0x05000500E3B5594340E349C4010000000000000000000000)  
  306.   
  307. --下面是示例给你展示了被重编译次数最多的 25 个存储过程。  
  308. select top 25   
  309.     sql_text.text,   
  310.     sql_handle,   
  311.     plan_generation_num,   
  312.     execution_count,   
  313.     dbid,   
  314.     objectid   
  315. from sys.dm_exec_query_stats a   
  316.     cross apply sys.dm_exec_sql_text(sql_handle) as sql_text where  plan_generation_num >1   
  317. order by plan_generation_num desc   
  318. --  
  319. --低效率的查询计划通常可以被检测出来。低效率的查询计划可以导致增加 CPU 的消耗。   
  320. --  
  321. --查询 sys.dm_exec_query_stats 是确定哪个查询累计使用 CPU 时间最多的有效方法。   
  322.   
  323. select   
  324.     highest_cpu_queries.plan_handle,   
  325.     highest_cpu_queries.total_worker_time,   
  326.     q.dbid,   
  327.     q.objectid,   
  328.     q.number,   
  329.     q.encrypted,   
  330.      q.[text]   
  331. from  (select top 50 qs.plan_handle, qs.total_worker_time  from  sys.dm_exec_query_stats qs   
  332.     order by qs.total_worker_time descas highest_cpu_queries   
  333.     cross apply sys.dm_exec_sql_text(plan_handle) as q   
  334. order by highest_cpu_queries.total_worker_time desc   
  335.   
  336. --动态管理查看查询最耗 IO 资源的 SQL 语法   
  337.   
  338. /**SQL05**/  
  339. select top 40  
  340. (total_logical_reads/execution_count) as [平均逻辑读取次数],  
  341. (total_logical_writes/execution_count) as [平均逻辑写入次数],  
  342. (total_physical_reads/execution_count) as [平均对象读取次数],  
  343.  Execution_count 运行次数,   
  344. substring(qt.text,r.statement_start_offset/2+1,   
  345. (case when r.statement_end_offset = -1   
  346. then datalength(qt.text)   
  347. else r.statement_end_offset end - r.statement_start_offset)/2+1) [运行语法],getdate() [查询时间], q.text,plan_handle--,p.query_plan  
  348. from sys.dm_exec_query_stats  as r  
  349.     cross apply sys.dm_exec_sql_text(r.sql_handle) as qt   
  350.     cross apply sys.dm_exec_query_plan(plan_handle) p  
  351.     cross apply sys.dm_exec_sql_text(plan_handle) as q  
  352. --where plan_handle = 0x050005003AEA4921402337D9010000000000000000000000  
  353. order by   
  354. (total_logical_reads + (total_logical_writes) +(total_physical_reads))Desc  
  355.   
  356. ---------------------------------  
  357. select top 5 (total_logical_reads/execution_count) as avg_logical_reads,  
  358.                    (total_logical_writes/execution_count) as avg_logical_writes,  
  359.            (total_physical_reads/execution_count) as avg_physical_reads,  
  360.            Execution_count, statement_start_offset, p.query_plan, q.text  
  361. from sys.dm_exec_query_stats  
  362.       cross apply sys.dm_exec_query_plan(plan_handle) p  
  363.       cross apply sys.dm_exec_sql_text(plan_handle) as q  
  364. order by (total_logical_reads + total_logical_writes)/execution_count Desc  
  365.   
  366. -----------------------------------------------------------  
  367. 等待类型  
  368.  说明  
  369.    
  370. ABR  
  371.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  372.    
  373. ASSEMBLY_LOAD  
  374.  在以独占的方式访问程序集加载时出现。  
  375.    
  376. ASYNC_DISKPOOL_LOCK  
  377.  当尝试同步并行的线程(执行创建或初始化文件等任务)时出现。  
  378.    
  379. ASYNC_IO_COMPLETION  
  380.  当某任务正在等待 I/O 完成时出现。  
  381.    
  382. ASYNC_NETWORK_IO  
  383.  当任务被阻止在网络之后时出现在网络写入中。验证客户端是否正在处理来自服务器的数据。  
  384.    
  385. AUDIT_GROUPCACHE_LOCK  
  386.  当等待控制对某个特殊缓存的访问的锁时出现。该缓存包含正在使用哪些审核来审核每个审核操作组的相关信息。  
  387.    
  388. AUDIT_LOGINCACHE_LOCK  
  389.  当等待控制对某个特殊缓存的访问的锁时出现。该缓存包含正在使用哪些审核来审核登录审核操作组的相关信息。  
  390.    
  391. AUDIT_ON_DEMAND_TARGET_LOCK  
  392.  当等待用于确保扩展事件目标相关审核的单一初始化的锁时出现。  
  393.    
  394. AUDIT_XE_SESSION_MGR  
  395.  当等待用于同步扩展事件会话相关审核的启动和停止的锁时出现。  
  396.    
  397. BACKUP  
  398.  当任务作为备份处理的一部分被阻止时出现。  
  399.    
  400. BACKUP_OPERATOR  
  401.  当任务正在等待磁带装入时出现。若要查看磁带状态,请查询 sys.dm_io_backup_tapes。如果装入操作没有挂起,则该等待类型可能指示磁带机发生硬件问题。  
  402.    
  403. BACKUPBUFFER  
  404.  在备份任务等待数据或等待用来存储数据的缓冲区时发生。此类型不常见,只有当任务等待装入磁带时才会出现。  
  405.    
  406. BACKUPIO  
  407.  在备份任务等待数据或等待用来存储数据的缓冲区时发生。此类型不常见,只有当任务等待装入磁带时才会出现。  
  408.    
  409. BACKUPTHREAD  
  410.  当某任务正在等待备份任务完成时出现。等待时间可能较长,从几分钟到几个小时。如果被等待的任务正处于 I/O 进程中,则该类型不指示发生问题。  
  411.    
  412. BAD_PAGE_PROCESS  
  413.  当后台可疑页记录器正在尝试避免每隔五秒以上的时间运行时出现。过多的可疑页会导致记录器频繁运行。  
  414.    
  415. BROKER_CONNECTION_RECEIVE_TASK  
  416.  在等待访问以便在连接端点上接收消息时出现。已序列化对端点的接收访问。  
  417.    
  418. BROKER_ENDPOINT_STATE_MUTEX  
  419.  当存在访问 Service Broker 连接端点状态的争用时出现。已序列化对更改状态的访问。  
  420.    
  421. BROKER_EVENTHANDLER  
  422.  当某任务正在 Service Broker 的主事件处理程序中等待时出现。出现时间应该非常短暂。  
  423.    
  424. BROKER_INIT  
  425.  当初始化每个活动数据库中的 Service Broker 时出现。该状态应当频繁出现。  
  426.    
  427. BROKER_MASTERSTART  
  428.  当某任务正在等待 Service Broker 的主事件处理程序启动时出现。出现时间应该非常短暂。  
  429.    
  430. BROKER_RECEIVE_WAITFOR  
  431.  当 RECEIVE WAITFOR 正在等待时出现。如果没有准备接收的消息,则通常出现该状态。  
  432.    
  433. BROKER_REGISTERALLENDPOINTS  
  434.  在初始化 Service Broker 连接端点的过程中出现。出现时间应该非常短暂。  
  435.    
  436. BROKER_SERVICE  
  437.  当与目标服务关联的 Service Broker 目标列表更新或重新设定优先顺序时出现。  
  438.    
  439. BROKER_SHUTDOWN  
  440.  当按计划关闭 Service Broker 时出现。该状态出现的时间应当尽量短暂。  
  441.    
  442. BROKER_TASK_STOP  
  443.  当 Service Broker 队列任务处理程序尝试关闭任务时出现。已序列化状态检查,并且必须预先处于运行状态。  
  444.    
  445. BROKER_TO_FLUSH  
  446.  当 Service Broker 惰性刷新器将内存中传输对象刷新到工作表时出现。  
  447.    
  448. BROKER_TRANSMITTER  
  449.  当 Service Broker 发送器正在等待工作时出现。  
  450.    
  451. BUILTIN_HASHKEY_MUTEX  
  452.  可能在实例启动之后而在初始化内部数据结构时出现。数据结构初始化之后将不会再次出现。  
  453.    
  454. CHECK_PRINT_RECORD  
  455.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  456.    
  457. CHECKPOINT_QUEUE  
  458.  当检查点任务正在等待下一个检查点请求时出现。  
  459.    
  460. CHKPT  
  461.  在服务器启动时出现以通知检查点线程可以启动。  
  462.    
  463. CLEAR_DB  
  464.  在执行会更改数据库状态的操作过程中发生,例如打开或关闭数据库。  
  465.    
  466. CLR_AUTO_EVENT  
  467.  当某任务当前正在执行公共语言运行时 (CLR) 执行并且正在等待特殊的自动事件启动时出现。通常会出现长时间等待,这并不意味着出现问题。  
  468.    
  469. CLR_CRST  
  470.  当某任务当前正在执行 CLR 执行并且正在等待输入当前由另一项任务正在使用的任务的关键部分时出现。  
  471.    
  472. CLR_JOIN  
  473.  当某任务当前正在执行 CLR 执行并且正在等待另一项任务结束时出现。当两任务之间具有联接时出现该等待状态。  
  474.    
  475. CLR_MANUAL_EVENT  
  476.  当某任务当前正在执行 CLR 执行并且正在等待特定手动事件启动时出现。  
  477.    
  478. CLR_MEMORY_SPY  
  479.  当为用于记录来自 CLR 的所有虚拟内存分配的数据结构等待获取锁时出现。如果存在并行访问,该数据结构将被锁定以维护其完整性。  
  480.    
  481. CLR_MONITOR  
  482.  当某任务当前正在执行 CLR 执行并且正在等待获取用于监视器的锁时出现。  
  483.    
  484. CLR_RWLOCK_READER  
  485.  当某任务当前正在执行 CLR 执行并且正在等待读取器锁时出现。  
  486.    
  487. CLR_RWLOCK_WRITER  
  488.  当某任务当前正在执行 CLR 执行并且正在等待编写器锁时出现。  
  489.    
  490. CLR_SEMAPHORE  
  491.  当某任务当前正在执行 CLR 执行并且正在等待信号量时出现。  
  492.    
  493. CLR_TASK_START  
  494.  在等待 CLR 任务完成启动时出现。  
  495.    
  496. CLRHOST_STATE_ACCESS  
  497.  当等待获取对 CLR 宿主数据结构的独占访问时出现。当设置或关闭 CLR 运行时时出现此等待类型。  
  498.    
  499. CMEMTHREAD  
  500.  当某任务正在等待线程安全内存对象时出现。当多项任务尝试分配来自同一个内存对象的内存而导致出现争用时,便可能延长等待时间。  
  501.    
  502. CXPACKET  
  503.  当尝试同步查询处理器交换迭代器时出现。如果针对该等待类型的争用成为问题时,可以考虑降低并行度。  
  504.    
  505. CXROWSET_SYNC  
  506.  在并行范围扫描期间出现。  
  507.    
  508. DAC_INIT  
  509.  当正在初始化专用管理员连接时出现。  
  510.    
  511. DBMIRROR_DBM_EVENT  
  512.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  513.    
  514. DBMIRROR_DBM_MUTEX  
  515.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  516.    
  517. DBMIRROR_EVENTS_QUEUE  
  518.  在数据库镜像等待处理事件时出现。  
  519.    
  520. DBMIRROR_SEND  
  521.  当某任务正在等待清除网络层的通信积压以便能够发送消息时出现。指示通信层正在开始重载并影响数据库镜像数据吞吐量。  
  522.    
  523. DBMIRROR_WORKER_QUEUE  
  524.  指示数据库镜像工作线程任务正在等待更多的工作。  
  525.    
  526. DBMIRRORING_CMD  
  527.  当某任务正在等待日志记录刷新到磁盘时出现。该等待状态应当保留较长的时间。  
  528.    
  529. DEADLOCK_ENUM_MUTEX  
  530.  在死锁监视器和 sys.dm_os_waiting_tasks 尝试确保 SQL Server 不同时运行多个死锁搜索时出现。  
  531.    
  532. DEADLOCK_TASK_SEARCH  
  533.  长时间等待此资源指示服务器正在 sys.dm_os_waiting_tasks 之上执行查询,并且这些查询正在阻止死锁监视器运行死锁搜索。该等待类型仅供死锁监视器使用。sys.dm_os_waiting_tasks 之上的查询使用 DEADLOCK_ENUM_MUTEX。  
  534.    
  535. DEBUG  
  536.  在 Transact-SQL 和 CLR 调试内部同步期间出现。  
  537.    
  538. DISABLE_VERSIONING  
  539.  当 SQL Server 轮询版本事务管理器,以查看最早的活动事务的时间戳是否晚于状态开始更改时的时间戳时出现。如果是,则所有在 ALTER DATABASE 语句运行之前启动的快照事务都已完成。当 SQL Server 通过 ALTER DATABASE 语句禁用版本控制时使用该等待状态。  
  540.    
  541. DISKIO_SUSPEND  
  542.  当某任务正在等待访问文件(外部备份处于活动状态)时出现。针对每个正在等待的用户进程报告该状态。每个用户进程大于五的计数可能指示外部备份需要太长时间才能完成。  
  543.    
  544. DISPATCHER_QUEUE_SEMAPHORE  
  545.  当调度程序池中的线程正在等待更多要处理的工作时出现。当调度程序处于空闲状态时,此等待类型的等待时间预计要增加。  
  546.    
  547. DLL_LOADING_MUTEX  
  548.  在等待 XML 分析器 DLL 加载时出现。  
  549.    
  550. DROPTEMP  
  551.  在上次尝试删除临时对象失败后再进行下次尝试之前出现。对于每一次失败的删除尝试,等待持续时间都以指数形式增长。  
  552.    
  553. DTC  
  554.  当某任务正在等待用于管理状态转换的事件时出现。该状态控制当 SQL Server 接收到 Microsoft 分布式事务处理协调器 (MS DTC) 服务不可用的通知之后执行 MS DTC 事务恢复的时间。  
  555.   
  556. 该状态还说明在 SQL Server 启动了 MS DTC 事务提交并且 SQL Server 正在等待 MS DTC 提交完成时进行等待的任务。  
  557.    
  558. DTC_ABORT_REQUEST  
  559.  当 MS DTC 工作线程会话正在等待获得 MS DTC 事务的所有权时,在该会话中出现。当 MS DTC 拥有了事务后,该会话可以回滚事务。通常,该会话将等待另一个正在使用事务的会话。  
  560.    
  561. DTC_RESOLVE  
  562.  当恢复任务正在等待跨数据库事务中的 master 数据库以查询该事务的结果时出现。  
  563.    
  564. DTC_STATE  
  565.  当某任务正在等待对内部 MS DTC 全局状态对象的更改进行保护的事件时出现。该状态应当保持非常短的时间。  
  566.    
  567. DTC_TMDOWN_REQUEST  
  568.  当 SQL Server 接收到 MS DTC 服务不可用的通知时,在 MS DTC 工作线程会话中出现。首先,工作线程将等待 MS DTC 恢复进程启动。然后,工作线程等待获取其正在处理的分布式事务的结果。此过程可能一直执行,直到重新建立与 MS DTC 服务的连接。  
  569.    
  570. DTC_WAITFOR_OUTCOME  
  571.  当恢复任务等待 MS DTC 处于活动状态以启用准备好的事务的解决方法时出现。  
  572.    
  573. DUMP_LOG_COORDINATOR  
  574.  当主任务正在等待子任务生成数据时出现。该状态通常不会出现。长时间的等待指示出现意外的阻塞。应当对子任务进行调查。  
  575.    
  576. DUMPTRIGGER  
  577.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  578.    
  579. EC  
  580.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  581.    
  582. EE_PMOLOCK  
  583.  在语句执行过程中特定的内存分配类型同步期间出现。  
  584.    
  585. EE_SPECPROC_MAP_INIT  
  586.  在对内部过程哈希表创建进行同步期间发生。此等待只能发生在 SQL Server 实例启动之后对哈希表的初始访问期间。  
  587.    
  588. ENABLE_VERSIONING  
  589.  当 SQL Server 在声明数据库可以转换到快照隔离允许的状态之前,等待该数据库中的所有更新事务完成时出现。当 SQL Server 通过 ALTER DATABASE 语句启用快照隔离时使用该状态。  
  590.    
  591. ERROR_REPORTING_MANAGER  
  592.  在对多个并发错误日志初始化进行同步期间发生。  
  593.    
  594. EXCHANGE  
  595.  在并行查询过程中查询处理器交换迭代器同步期间出现。  
  596.    
  597. EXECSYNC  
  598.  在并行查询过程中同步与交换迭代器无关的区域内的查询处理器期间出现。例如,此类区域包括位图、二进制大型对象 (LOB) 以及假脱机迭代器等。LOB 可能会经常使用该等待状态。  
  599.    
  600. EXECUTION_PIPE_EVENT_INTERNAL  
  601.  当同步通过连接上下文提交的批处理执行的创建器和使用者部件期间出现。  
  602.    
  603. FAILPOINT  
  604.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  605.    
  606. FCB_REPLICA_READ  
  607.  当同步快照(或 DBCC 创建的临时快照)稀疏文件的读取时出现。  
  608.    
  609. FCB_REPLICA_WRITE  
  610.  当同步快照(或 DBCC 创建的临时快照)稀疏文件的页推送或页请求时出现。  
  611.    
  612. FS_FC_RWLOCK  
  613.  当 FILESTREAM 垃圾收集器等待执行下列操作之一时出现:  
  614.   
  615. 禁用垃圾收集(由备份和还原使用)。  
  616.   
  617. 执行 FILESTREAM 垃圾收集器的一个周期。  
  618.    
  619. FS_GARBAGE_COLLECTOR_SHUTDOWN  
  620.  当 FILESTREAM 垃圾收集器等待清除任务完成时出现。  
  621.    
  622. FS_HEADER_RWLOCK  
  623.  当等待获取对 FILESTREAM 数据容器的 FILESTREAM 标头的访问,以便读取或更新 FILESTREAM 标头文件 (Filestream.hdr) 中的内容时出现。  
  624.    
  625. FS_LOGTRUNC_RWLOCK  
  626.  当等待获取对 FILESTREAM 日志截断的访问以执行下列操作之一时出现:  
  627.   
  628. 临时禁用 FILESTREAM 日志 (FSLOG) 截断(由备份和还原使用)。  
  629.   
  630. 执行 FSLOG 截断的一个周期。  
  631.    
  632. FSA_FORCE_OWN_XACT  
  633.  当 FILESTREAM 文件 I/O 操作需要绑定到关联的事务,但该事务当前由另一个会话拥有时出现。  
  634.    
  635. FSAGENT  
  636.  当 FILESTREAM 文件 I/O 操作等待的 FILESTREAM 代理资源正由另一个文件 I/O 操作使用时出现。  
  637.    
  638. FSTR_CONFIG_MUTEX  
  639.  当等待另一个 FILESTREAM 功能重新配置完成时出现。  
  640.    
  641. FSTR_CONFIG_RWLOCK  
  642.  当等待序列化对 FILESTREAM 配置参数的访问时出现。  
  643.    
  644. FT_METADATA_MUTEX  
  645.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  646.    
  647. FT_RESTART_CRAWL  
  648.  在全文爬网需要从上一个已知可用点重新启动以便从暂时故障中恢复时出现。等待使当前正在此总体中工作的工作线程任务完成或退出当前步骤。  
  649.    
  650. FULLTEXT GATHERER  
  651.  在同步全文操作期间发生。  
  652.    
  653. GUARDIAN  
  654.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  655.    
  656. HTTP_ENUMERATION  
  657.  在启动时出现,以枚举 HTTP 端点以启动 HTTP。  
  658.    
  659. HTTP_START  
  660.  当连接正在等待 HTTP 完成初始化时出现。  
  661.    
  662. IMPPROV_IOWAIT  
  663.  当 SQL Server 等待 Bulkload I/O 完成时出现。  
  664.    
  665. INTERNAL_TESTING  
  666.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  667.    
  668. IO_AUDIT_MUTEX  
  669.  在跟踪事件缓冲区同步期间出现。  
  670.    
  671. IO_COMPLETION  
  672.  在等待 I/O 操作完成时出现。通常,该等待类型表示非数据页 I/O。数据页 I/O 完成等待显示为 PAGEIOLATCH_* waits。  
  673.    
  674. IO_RETRY  
  675.  当 I/O 操作(例如读取磁盘或写入磁盘)由于资源不足而失败,然后重试时出现。  
  676.    
  677. IOAFF_RANGE_QUEUE  
  678.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  679.    
  680. KSOURCE_WAKEUP  
  681.  在等待来自服务控制管理器的请求期间由服务控制任务使用。可能会出现长时间等待,这并不指示出现问题。  
  682.    
  683. KTM_ENLISTMENT  
  684.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  685.    
  686. KTM_RECOVERY_MANAGER  
  687.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  688.    
  689. KTM_RECOVERY_RESOLUTION  
  690.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  691.    
  692. LATCH_DT  
  693.  等待 DT(破坏)闩锁时出现。它不包括缓冲区闩锁或事务标记闩锁。sys.dm_os_latch_stats 中提供了 LATCH_* waits 的列表。请注意,sys.dm_os_latch_stats 将 LATCH_NL、LATCH_SH、LATCH_UP、LATCH_EX 以及 LATCH_DT 等待分到一组。  
  694.    
  695. LATCH_EX  
  696.  等待 EX(排他)闩锁时出现。它不包括缓冲区闩锁或事务标记闩锁。sys.dm_os_latch_stats 中提供了 LATCH_* waits 的列表。请注意,sys.dm_os_latch_stats 将 LATCH_NL、LATCH_SH、LATCH_UP、LATCH_EX 以及 LATCH_DT 等待分到一组。  
  697.    
  698. LATCH_KP  
  699.  等待 KP(保持)闩锁时出现。它不包括缓冲区闩锁或事务标记闩锁。sys.dm_os_latch_stats 中提供了 LATCH_* waits 的列表。请注意,sys.dm_os_latch_stats 将 LATCH_NL、LATCH_SH、LATCH_UP、LATCH_EX 以及 LATCH_DT 等待分到一组。  
  700.    
  701. LATCH_NL  
  702.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  703.    
  704. LATCH_SH  
  705.  等待 SH(共享)闩锁时出现。它不包括缓冲区闩锁或事务标记闩锁。sys.dm_os_latch_stats 中提供了 LATCH_* waits 的列表。请注意,sys.dm_os_latch_stats 将 LATCH_NL、LATCH_SH、LATCH_UP、LATCH_EX 以及 LATCH_DT 等待分到一组。  
  706.    
  707. LATCH_UP  
  708.  等待 UP(更新)闩锁时出现。它不包括缓冲区闩锁或事务标记闩锁。sys.dm_os_latch_stats 中提供了 LATCH_* waits 的列表。请注意,sys.dm_os_latch_stats 将 LATCH_NL、LATCH_SH、LATCH_UP、LATCH_EX 以及 LATCH_DT 等待分到一组。  
  709.    
  710. LAZYWRITER_SLEEP  
  711.  当惰性编写器被挂起时出现。正在等待的后台任务所用时间的度量值。在查找用户阻隔点所时不要考虑该状态。  
  712.    
  713. LCK_M_BU  
  714.  当某任务正在等待获取大容量更新 (BU) 锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  715.    
  716. LCK_M_IS  
  717.  当某任务正在等待获取意向共享 (IS) 锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  718.    
  719. LCK_M_IU  
  720.  当某任务正在等待获取意向更新 (IU) 锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  721.    
  722. LCK_M_IX  
  723.  当某任务正在等待获取意向排他 (IX) 锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  724.    
  725. LCK_M_RIn_NL  
  726.  当某任务正在等待获取当前键值上的 NULL 锁以及当前键和上一个键之间的插入范围锁时出现。键上的 NULL 锁是指立即释放的锁。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  727.    
  728. LCK_M_RIn_S  
  729.  当某任务正在等待获取当前键值上的共享锁以及当前键和上一个键之间的插入范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  730.    
  731. LCK_M_RIn_U  
  732.  任务正在等待获取当前键值上的更新锁以及当前键和上一个键之间的插入范围锁。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  733.    
  734. LCK_M_RIn_X  
  735.  当某任务正在等待获取当前键值上的排他锁以及当前键和上一个键之间的插入范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  736.    
  737. LCK_M_RS_S  
  738.  当某任务正在等待获取当前键值上的共享锁以及当前键和上一个键之间的共享范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  739.    
  740. LCK_M_RS_U  
  741.  当某任务正在等待获取当前键值上的更新锁以及当前键和上一个键之间的更新范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  742.    
  743. LCK_M_RX_S  
  744.  当某任务正在等待获取当前键值上的共享锁以及当前键和上一个键之间的排他范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  745.    
  746. LCK_M_RX_U  
  747.  当某任务正在等待获取当前键值上的更新锁以及当前键和上一个键之间的排他范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  748.    
  749. LCK_M_RX_X  
  750.  当某任务正在等待获取当前键值上的排他锁以及当前键和上一个键之间的排他范围锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  751.    
  752. LCK_M_S  
  753.  当某任务正在等待获取共享锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  754.    
  755. LCK_M_SCH_M  
  756.  当某任务正在等待获取架构修改锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  757.    
  758. LCK_M_SCH_S  
  759.  当某任务正在等待获取架构共享锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  760.    
  761. LCK_M_SIU  
  762.  当某任务正在等待获取共享意向更新锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  763.    
  764. LCK_M_SIX  
  765.  当某任务正在等待获取共享意向排他锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  766.    
  767. LCK_M_U  
  768.  当某任务正在等待获取更新锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  769.    
  770. LCK_M_UIX  
  771.  当某任务正在等待获取更新意向排他锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  772.    
  773. LCK_M_X  
  774.  当某任务正在等待获取排他锁时出现。有关锁兼容性矩阵,请参阅 sys.dm_tran_locks (Transact-SQL)。  
  775.    
  776. LOGBUFFER  
  777.  当某任务正在等待日志缓冲区的空间以存储日志记录时出现。连续的高值可能指示日志设备无法跟上服务器生成的日志量。  
  778.    
  779. LOGGENERATION  
  780.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  781.    
  782. LOGMGR  
  783.  在数据库关闭过程中,当某任务正在等待任何未完成的日志 I/O 在关闭日志之前完成时出现。  
  784.    
  785. LOGMGR_FLUSH  
  786.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  787.    
  788. LOGMGR_QUEUE  
  789.  在日志编写器任务等待工作请求时出现。  
  790.    
  791. LOGMGR_RESERVE_APPEND  
  792.  当某任务正在等待查看日志截断是否能释放日志空间以使该任务能写入新的日志记录时出现。请考虑为受影响的数据库增加日志文件的大小以减少该等待时间。  
  793.    
  794. LOWFAIL_MEMMGR_QUEUE  
  795.  在等待可用内存期间出现。  
  796.    
  797. MISCELLANEOUS  
  798.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  799.    
  800. MSQL_DQ  
  801.  当某任务正在等待分布式查询操作完成时出现。它用于检测潜在的多个活动的结果集 (MARS) 应用程序死锁。该等待将在分布式查询调用完成时结束。  
  802.    
  803. MSQL_XACT_MGR_MUTEX  
  804.  当某任务正在等待获取会话事务管理器的所有权以执行会话级别事务操作时出现。  
  805.    
  806. MSQL_XACT_MUTEX  
  807.  在事务使用同步期间出现。请求必须先获取互斥体才可以使用事务。  
  808.    
  809. MSQL_XP  
  810.  当某任务正在等待扩展存储过程结束时出现。SQL Server 使用该等待状态检测潜在的 MARS 应用程序死锁。该等待将在扩展存储过程调用结束时停止。  
  811.    
  812. MSSEARCH  
  813.  在全文搜索调用期间出现。该等待在全文操作完成时结束。它不指示争用,而指示全文操作的持续时间。  
  814.    
  815. NET_WAITFOR_PACKET  
  816.  在网络读取过程中连接正在等待网络数据包时出现。  
  817.    
  818. OLEDB  
  819.  在 SQL Server 调用 SQL Server Native Client OLE DB 访问接口时出现。该等待类型不用于同步。而是用于指示调用 OLE DB 访问接口的持续时间。  
  820.    
  821. ONDEMAND_TASK_QUEUE  
  822.  在后台任务等待高优先级系统任务请求时出现。长时间的等待指示一直没有要处理的高优先级请求,不应引起关注。  
  823.    
  824. PAGEIOLATCH_DT  
  825.  在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“破坏”模式。长时间的等待可能指示磁盘子系统出现问题。  
  826.    
  827. PAGEIOLATCH_EX  
  828.  在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“独占”模式。长时间的等待可能指示磁盘子系统出现问题。  
  829.    
  830. PAGEIOLATCH_KP  
  831.  在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“保持”模式。长时间的等待可能指示磁盘子系统出现问题。  
  832.    
  833. PAGEIOLATCH_NL  
  834.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  835.    
  836. PAGEIOLATCH_SH  
  837.  在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“共享”模式。长时间的等待可能指示磁盘子系统出现问题。  
  838.    
  839. PAGEIOLATCH_UP  
  840.  在任务等待 I/O 请求中缓冲区的闩锁时发生。闩锁请求处于“更新”模式。长时间的等待可能指示磁盘子系统出现问题。  
  841.    
  842. PAGELATCH_DT  
  843.  在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“破坏”模式。  
  844.    
  845. PAGELATCH_EX  
  846.  在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“独占”模式。  
  847.    
  848. PAGELATCH_KP  
  849.  在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“保持”模式。  
  850.    
  851. PAGELATCH_NL  
  852.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  853.    
  854. PAGELATCH_SH  
  855.  在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“共享”模式。  
  856.    
  857. PAGELATCH_UP  
  858.  在任务等待不处于 I/O 请求中的缓冲区闩锁时发生。闩锁请求处于“更新”模式。  
  859.    
  860. PARALLEL_BACKUP_QUEUE  
  861.  在序列化由 RESTORE HEADERONLY、RESTORE FILELISTONLY 或 RESTORE LABELONLY 生成的输出时出现。  
  862.    
  863. PREEMPTIVE_ABR  
  864.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  865.    
  866. PREEMPTIVE_AUDIT_ACCESS_EVENTLOG  
  867.  在 SQL Server 操作系统 (SQLOS) 计划程序切换到抢先模式时发生,以便将审核事件写入 Windows 事件日志。  
  868.    
  869. PREEMPTIVE_AUDIT_ACCESS_SECLOG  
  870.  在 SQLOS 计划程序切换到抢先模式时发生,以便将审核事件写入 Windows 安全日志。  
  871.    
  872. PREEMPTIVE_CLOSEBACKUPMEDIA  
  873.  在 SQLOS 计划程序切换到抢先模式时发生,以便关闭备份介质。  
  874.    
  875. PREEMPTIVE_CLOSEBACKUPTAPE  
  876.  在 SQLOS 计划程序切换到抢先模式时发生,以便关闭磁带备份设备。  
  877.    
  878. PREEMPTIVE_CLOSEBACKUPVDIDEVICE  
  879.  在 SQLOS 计划程序切换到抢先模式时发生,以便关闭虚拟备份设备。  
  880.    
  881. PREEMPTIVE_CLUSAPI_CLUSTERRESOURCECONTROL  
  882.  在 SQLOS 计划程序切换到抢先模式时发生,以便执行故障转移群集操作。  
  883.    
  884. PREEMPTIVE_COM_COCREATEINSTANCE  
  885.  在 SQLOS 计划程序切换到抢先模式时发生,以便创建 COM 对象。  
  886.    
  887. PREEMPTIVE_SOSTESTING  
  888.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  889.    
  890. PREEMPTIVE_STRESSDRIVER  
  891.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  892.    
  893. PREEMPTIVE_TESTING  
  894.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  895.    
  896. PREEMPTIVE_XETESTING  
  897.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  898.    
  899. PRINT_ROLLBACK_PROGRESS  
  900.  用于等待用户进程在已通过 ALTER DATABASE 终止子句完成转换的数据库中结束。有关详细信息,请参阅 ALTER DATABASE (Transact-SQL)。  
  901.    
  902. QPJOB_KILL  
  903.  指示异步统计信息自动更新在开始运行时通过调用 KILL 命令而取消。终止线程处于挂起状态,等待它开始侦听 KILL 命令。正常情况下,该值不到一秒钟。  
  904.    
  905. QPJOB_WAITFOR_ABORT  
  906.  指示异步统计信息自动更新在运行时通过调用 KILL 命令而取消。目前更新已完成,但是在终止线程消息协调完成之前一直于挂起状态。这是一个普通而少见的状态,应当非常短暂。正常情况下,该值不到一秒钟。  
  907.    
  908. QRY_MEM_GRANT_INFO_MUTEX  
  909.  当查询执行内存管理尝试控制对静态授予信息列表的访问时出现。该状态列出当前已批准的内存请求以及正在等待的内存请求的有关信息。该状态是一个简单的访问控制状态。该状态始终不应当等待较长的时间。如果未释放互斥体,则所有占用内存的新查询都将停止响应。  
  910.    
  911. QUERY_ERRHDL_SERVICE_DONE  
  912.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  913.    
  914. QUERY_EXECUTION_INDEX_SORT_EVENT_OPEN  
  915.  当脱机创建索引生成以并行方式运行,并且正在排序的不同工作线程同步访问排序文件时出现。  
  916.    
  917. QUERY_NOTIFICATION_MGR_MUTEX  
  918.  在查询通知管理器中的垃圾收集队列同步期间出现。  
  919.    
  920. QUERY_NOTIFICATION_SUBSCRIPTION_MUTEX  
  921.  在查询通知中事务的状态同步期间出现。  
  922.    
  923. QUERY_NOTIFICATION_TABLE_MGR_MUTEX  
  924.  在查询通知管理器中的内部同步期间出现。  
  925.    
  926. QUERY_NOTIFICATION_UNITTEST_MUTEX  
  927.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  928.    
  929. QUERY_OPTIMIZER_PRINT_MUTEX  
  930.  在查询优化器诊断信息输出生成的同步期间出现。该等待类型仅在诊断设置已根据 Microsoft 产品支持的说明启用后出现。  
  931.    
  932. QUERY_TRACEOUT  
  933.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  934.    
  935. QUERY_WAIT_ERRHDL_SERVICE  
  936.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  937.    
  938. RECOVER_CHANGEDB  
  939.  在备用数据库中同步数据库状态期间出现。  
  940.    
  941. REPL_CACHE_ACCESS  
  942.  在同步复制项目缓存的期间出现。在这些等待期间,复制日志读取器将停止,已发布表中的数据定义语言 (DDL) 语句也将被阻止。  
  943.    
  944. REPL_SCHEMA_ACCESS  
  945.  在同步复制架构版本信息的期间出现。该状态在下列情况下存在:针对复制对象执行 DDL 语句时,以及日志读取器根据 DDL 出现次数生成或使用版本控制架构时。  
  946.    
  947. REPLICA_WRITES  
  948.  在任务等待将页写入数据库快照或 DBCC 副本的操作完成时出现。  
  949.    
  950. REQUEST_DISPENSER_PAUSE  
  951.  在任务等待所有未完成的 I/O 完成时出现,以便可以为快照备份冻结文件的 I/O。  
  952.    
  953. REQUEST_FOR_DEADLOCK_SEARCH  
  954.  在死锁监视器等待开始下一次死锁搜索时出现。在两次死锁检测之间可能出现该等待,长时间等待此资源并不指示出现问题。  
  955.    
  956. RESMGR_THROTTLED  
  957.  在有新请求传入并且基于 GROUP_MAX_REQUESTS 设置而中止时出现。  
  958.    
  959. RESOURCE_QUEUE  
  960.  在同步不同的内部资源队列期间出现。  
  961.    
  962. RESOURCE_SEMAPHORE  
  963.  当由于存在其他并发查询而无法立即批准查询内存请求时出现。等待时间较长或等待次数较多可能指示并发查询的数量过多或内存请求的数量过多。  
  964.    
  965. RESOURCE_SEMAPHORE_MUTEX  
  966.  在查询等待其保留线程的请求完成时出现。它也在同步查询编译和内存授予请求时出现。  
  967.    
  968. RESOURCE_SEMAPHORE_QUERY_COMPILE  
  969.  在并发查询编译的数量达到中止限制时出现。等待时间较长或等待次数较多可能指示编译、重新编辑或不可缓存的计划过多。  
  970.    
  971. RESOURCE_SEMAPHORE_SMALL_QUERY  
  972.  当由于存在其他并发查询而无法立即批准较小查询的内存请求时出现。等待时间不应超过几秒钟,因为如果服务器无法在几秒钟内给予请求的内存,则会将请求传输到主查询内存池中。等待时间较长可能指示当主内存池被等待的查询阻塞时并发小查询的数量过多。  
  973.    
  974. SEC_DROP_TEMP_KEY  
  975.  在尝试删除临时安全密钥失败之后并在重试之前出现。  
  976.    
  977. SECURITY_MUTEX  
  978.  当等待互斥体时出现,这些互斥体控制对可扩展的密钥管理 (EKM) 加密提供程序的全局列表以及 EKM 会话的会话作用域列表的访问。  
  979.    
  980. SEQUENTIAL_GUID  
  981.  当正在获取新的连续 GUID 时出现。  
  982.    
  983. SERVER_IDLE_CHECK  
  984.  当资源监视器正在尝试将 SQL Server 实例声明为空闲或正在尝试唤醒时,在 SQL Server 实例空闲状态的同步期间出现。  
  985.    
  986. SHUTDOWN  
  987.  在关闭语句等待活动连接退出时出现。  
  988.    
  989. SLEEP_BPOOL_FLUSH  
  990.  当检查点为了避免磁盘子系统泛滥而中止新 I/O 的发布时出现。  
  991.    
  992. SLEEP_DBSTARTUP  
  993.  在等待所有数据库恢复时数据库的启动期间出现。  
  994.    
  995. SLEEP_DCOMSTARTUP  
  996.  通常在等待 DCOM 初始化完成时 SQL Server 实例的启动期间出现。  
  997.    
  998. SLEEP_MSDBSTARTUP  
  999.  在 SQL 跟踪等待 msdb 数据库完成启动时出现。  
  1000.    
  1001. SLEEP_SYSTEMTASK  
  1002.  在等待 tempdb 完成启动时后台任务的启动期间出现。  
  1003.    
  1004. SLEEP_TASK  
  1005.  当任务在等待一般事件出现期间睡眠时出现。  
  1006.    
  1007. SLEEP_TEMPDBSTARTUP  
  1008.  在任务等待 tempdb 完成启动时出现。  
  1009.    
  1010. SNI_CRITICAL_SECTION  
  1011.  在 SQL Server 网络组件中进行内部同步期间出现。  
  1012.    
  1013. SNI_HTTP_WAITFOR_0_DISCON  
  1014.  在等待未完成的 HTTP 连接退出的过程中 SQL Server 的关闭期间出现。  
  1015.    
  1016. SNI_LISTENER_ACCESS  
  1017.  当等待非一致性内存访问 (NUMA) 节点更新状态更改时出现。已序列化对状态更改的访问。  
  1018.    
  1019. SNI_TASK_COMPLETION  
  1020.  当在 NUMA 节点状态更改期间等待所有任务完成时出现。  
  1021.    
  1022. SOAP_READ  
  1023.  在等待 HTTP 网络读取完成时出现。  
  1024.    
  1025. SOAP_WRITE  
  1026.  在等待 HTTP 网络写入完成时出现。  
  1027.    
  1028. SOS_CALLBACK_REMOVAL  
  1029.  在为了删除回调而对回调列表执行同步期间出现。服务器初始化完成之后,此计数器可能不会更改。  
  1030.    
  1031. SOS_DISPATCHER_MUTEX  
  1032.  在调度程序池进行内部同步期间出现。包括调整该池时。  
  1033.    
  1034. SOS_LOCALALLOCATORLIST  
  1035.  在 SQL Server 内存管理器中进行内部同步期间出现。  
  1036.    
  1037. SOS_MEMORY_USAGE_ADJUSTMENT  
  1038.  在池之间调整内存使用情况时出现。  
  1039.    
  1040. SOS_OBJECT_STORE_DESTROY_MUTEX  
  1041.  当破坏池中的对象时在内存池中进行内部同步期间出现。  
  1042.    
  1043. SOS_PROCESS_AFFINITY_MUTEX  
  1044.  在同步访问进程关联设置期间出现。  
  1045.    
  1046. SOS_RESERVEDMEMBLOCKLIST  
  1047.  在 SQL Server 内存管理器中进行内部同步期间出现。  
  1048.    
  1049. SOS_SCHEDULER_YIELD  
  1050.  在任务自愿为要执行的其他任务生成计划程序时出现。在该等待期间任务正在等待其量程更新。  
  1051.    
  1052. SOS_SMALL_PAGE_ALLOC  
  1053.  在分配和释放由某些内存对象管理的内存时出现。  
  1054.    
  1055. SOS_STACKSTORE_INIT_MUTEX  
  1056.  在内部存储初始化同步期间出现。  
  1057.    
  1058. SOS_SYNC_TASK_ENQUEUE_EVENT  
  1059.  在任务以同步方式启动时出现。SQL Server 中的大多数任务都以同步方式启动,在此方式中控制权在任务请求放置在工作队列之后立即返回到启动器。  
  1060.    
  1061. SOS_VIRTUALMEMORY_LOW  
  1062.  在内存分配等待资源管理器释放虚拟内存时出现。  
  1063.    
  1064. SOSHOST_EVENT  
  1065.  当宿主组件(如 CLR)在 SQL Server 事件同步对象中等待时出现。  
  1066.    
  1067. SOSHOST_INTERNAL  
  1068.  在宿主组件(如 CLR)使用的内存管理器回调同步期间出现。  
  1069.    
  1070. SOSHOST_MUTEX  
  1071.  当宿主组件(如 CLR)在 SQL Server 互斥体同步对象中等待时出现。  
  1072.    
  1073. SOSHOST_RWLOCK  
  1074.  当宿主组件(如 CLR)在 SQL Server 读取器编写器同步对象中等待时出现。  
  1075.    
  1076. SOSHOST_SEMAPHORE  
  1077.  当宿主组件(如 CLR)在 SQL Server 信号量同步对象中等待时出现。  
  1078.    
  1079. SOSHOST_SLEEP  
  1080.  当宿主任务在等待一般事件出现期间睡眠时出现。宿主任务由宿主组件(如 CLR)使用。  
  1081.    
  1082. SOSHOST_TRACELOCK  
  1083.  在同步访问跟踪流期间出现。  
  1084.    
  1085. SOSHOST_WAITFORDONE  
  1086.  在宿主组件(如 CLR)等待任务完成时出现。  
  1087.    
  1088. SQLCLR_APPDOMAIN  
  1089.  在 CLR 等待应用程序域完成启动时出现。  
  1090.    
  1091. SQLCLR_ASSEMBLY  
  1092.  在等待访问 appdomain 中已加载的程序集列表时出现。  
  1093.    
  1094. SQLCLR_DEADLOCK_DETECTION  
  1095.  在 CLR 等待死锁检测完成时出现。  
  1096.    
  1097. SQLCLR_QUANTUM_PUNISHMENT  
  1098.  在 CLR 任务由于已经超过了其执行量程而中止时出现。此中止已完成,以便减小此大量消耗资源的任务对其他任务的影响。  
  1099.    
  1100. SQLSORT_NORMMUTEX  
  1101.  在初始化内部排序结构时进行内部同步期间出现。  
  1102.    
  1103. SQLSORT_SORTMUTEX  
  1104.  在初始化内部排序结构时进行内部同步期间出现。  
  1105.    
  1106. SQLTRACE_BUFFER_FLUSH  
  1107.  当某任务正在等待后台任务将跟踪缓冲区每隔四秒刷新到磁盘时出现。  
  1108.    
  1109. SQLTRACE_LOCK  
  1110.  在文件跟踪过程中同步跟踪缓冲区期间出现。  
  1111.    
  1112. SQLTRACE_SHUTDOWN  
  1113.  在跟踪关闭等待未完成的跟踪事件完成时出现。  
  1114.    
  1115. SQLTRACE_WAIT_ENTRIES  
  1116.  在 SQL 跟踪事件队列等待数据包到达队列时出现。  
  1117.    
  1118. SRVPROC_SHUTDOWN  
  1119.  在关闭进程等待内部资源释放以完全关闭时出现。  
  1120.    
  1121. TEMPOBJ  
  1122.  在临时对象删除同步时出现。该等待很少出现,仅在任务已请求 temp 表的独占访问删除时出现。  
  1123.    
  1124. THREADPOOL  
  1125.  当某任务正在等待工作线程运行时出现。这可能指示最大工作线程数设置过低,或批处理执行时间过长,从而减少可满足其他批处理的工作线程数。  
  1126.    
  1127. TIMEPRIV_TIMEPERIOD  
  1128.  在扩展事件计时器进行内部同步期间出现。  
  1129.    
  1130. TRACEWRITE  
  1131.  当 SQL 跟踪行集跟踪提供程序等待可用缓冲区或可处理事件的缓冲区时出现。  
  1132.    
  1133. TRAN_MARKLATCH_DT  
  1134.  在等待事务标记闩锁中的破坏模式闩锁时出现。事务标记闩锁用于同步提交与标记的事务。  
  1135.    
  1136. TRAN_MARKLATCH_EX  
  1137.  在等待标记事务中的排他模式闩锁时出现。事务标记闩锁用于同步提交与标记的事务。  
  1138.    
  1139. TRAN_MARKLATCH_KP  
  1140.  在等待标记事务中的保持模式闩锁时出现。事务标记闩锁用于同步提交与标记的事务。  
  1141.    
  1142. TRAN_MARKLATCH_NL  
  1143.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  1144.    
  1145. TRAN_MARKLATCH_SH  
  1146.  在等待标记事务中的共享模式闩锁时出现。事务标记闩锁用于同步提交与标记的事务。  
  1147.    
  1148. TRAN_MARKLATCH_UP  
  1149.  在等待标记事务中的更新模式闩锁时出现。事务标记闩锁用于同步提交与标记的事务。  
  1150.    
  1151. TRANSACTION_MUTEX  
  1152.  在同步多个批处理访问事务期间出现。  
  1153.    
  1154. UTIL_PAGE_ALLOC  
  1155.  在内存不足期间事务日志扫描等待可用内存时出现。  
  1156.    
  1157. VIA_ACCEPT  
  1158.  当在启动过程中完成虚拟接口适配器 (VIA) 提供程序连接时出现。  
  1159.    
  1160. VIEW_DEFINITION_MUTEX  
  1161.  在同步访问已缓存的视图定义期间出现。  
  1162.    
  1163. WAIT_FOR_RESULTS  
  1164.  在等待查询通知触发时出现。  
  1165.    
  1166. WAITFOR  
  1167.  显示为 WAITFOR Transact-SQL 语句的结果。等待持续时间由此语句的参数确定。它是用户启动的等待。  
  1168.    
  1169. WAITFOR_TASKSHUTDOWN  
  1170.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  1171.    
  1172. WAITSTAT_MUTEX  
  1173.  在同步访问用于填充 sys.dm_os_wait_stats 的统计信息集期间出现。  
  1174.    
  1175. WCC  
  1176.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  1177.    
  1178. WORKTBL_DROP  
  1179.  在删除出现故障的工作表之后,重试之前的暂停期间出现。  
  1180.    
  1181. WRITE_COMPLETION  
  1182.  当正在进行写操作时出现。  
  1183.    
  1184. WRITELOG  
  1185.  等待日志刷新完成时出现。导致日志刷新的常见操作是检查点和事务提交。  
  1186.    
  1187. XACT_OWN_TRANSACTION  
  1188.  在等待获取事务的所有权时出现。  
  1189.    
  1190. XACT_RECLAIM_SESSION  
  1191.  在等待会话的当前所有者释放会话的所有权时出现。  
  1192.    
  1193. XACTLOCKINFO  
  1194.  在同步访问事务锁列表期间出现。除事务本身之外,在页拆分过程中死锁检测和锁迁移等操作也可访问锁列表。  
  1195.    
  1196. XACTWORKSPACE_MUTEX  
  1197.  在同步事务中的脱离以及事务登记成员之间的数据库锁数时出现。  
  1198.    
  1199. XE_BUFFERMGR_ALLPROCESSED_EVENT  
  1200.  在扩展事件会话缓冲区刷新到目标时发生。此等待在后台线程上发生。  
  1201.    
  1202. XE_BUFFERMGR_FREEBUF_EVENT  
  1203.  当下列任一条件成立时发生:  
  1204.   
  1205. 扩展事件会话配置为无事件损失,且会话中的所有缓冲区当前已满。这表明扩展事件会话缓冲区太小,或应对其进行分区。  
  1206.   
  1207. 审核遇到延迟。这表明写入审核的驱动器上存在磁盘瓶颈。  
  1208.    
  1209. XE_DISPATCHER_CONFIG_SESSION_LIST  
  1210.  在使用异步目标的扩展事件会话启动或停止时发生。此等待表明发生了以下某一情况:  
  1211.   
  1212. 扩展事件会话正在向后台线程池注册。  
  1213.   
  1214. 后台线程池正在根据当前负荷计算需要的线程数量。  
  1215.    
  1216. XE_DISPATCHER_JOIN  
  1217.  在用于扩展事件会话的后台线程终止时发生。  
  1218.    
  1219. XE_DISPATCHER_WAIT  
  1220.  在用于扩展事件会话的后台线程等待事件缓冲区进行处理时发生。  
  1221.    
  1222. XE_MODULEMGR_SYNC  
  1223.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  1224.    
  1225. XE_OLS_LOCK  
  1226.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  1227.    
  1228. XE_PACKAGE_LOCK_BACKOFF  
  1229.  标识为仅供参考。不提供支持。不保证以后的兼容性。  
  1230.    
  1231.   
  1232. SELECT a3.name AS [Schema 名称],  
  1233.     a2.name AS [表名称],  
  1234.     a1.rows as 记录条数,  
  1235.     (a1.reserved + ISNULL(a4.reserved,0))* 8 AS [保留空间(K)],  
  1236.     a1.data * 8 AS [数据使用空间(k)],  
  1237.     (CASE WHEN (a1.used + ISNULL(a4.used,0)) > a1.data   
  1238.     THEN (a1.used + ISNULL(a4.used,0)) - a1.data   
  1239.     ELSE 0 END) * 8 AS [索引使用空间(k)],  
  1240.     (CASE WHEN (a1.reserved + ISNULL(a4.reserved,0)) > a1.used   
  1241.     THEN (a1.reserved + ISNULL(a4.reserved,0)) - a1.used   
  1242.     ELSE 0 END) * 8 AS [未用空间(k)],  
  1243.     a1.data * 8*1024/(CASE WHEN a1.Rows=0 THEN 1 ELSE a1.Rows END) 平均每条记录长度  
  1244.     FROM  
  1245.         (  
  1246.         SELECT  
  1247.         ps.object_id,  
  1248.         SUM (  
  1249.         CASE  
  1250.         WHEN (ps.index_id < 2) THEN row_count  
  1251.         ELSE 0  
  1252.         END  
  1253.         ) AS [rows],  
  1254.         SUM (ps.reserved_page_count) AS reserved,  
  1255.         SUM (  
  1256.         CASE  
  1257.         WHEN (ps.index_id < 2) THEN   
  1258.         (ps.in_row_data_page_count + ps.lob_used_page_count + ps.row_overflow_used_page_count)  
  1259.         ELSE (ps.lob_used_page_count + ps.row_overflow_used_page_count)  
  1260.         END  
  1261.         ) AS data,  
  1262.         SUM (ps.used_page_count) AS used  
  1263.         FROM sys.dm_db_partition_stats ps  
  1264.         GROUP BY ps.object_id) AS a1  
  1265.         LEFT OUTER JOIN  
  1266.             (  
  1267.             SELECT  
  1268.             it.parent_id,  
  1269.             SUM(ps.reserved_page_count) AS reserved,  
  1270.             SUM(ps.used_page_count) AS used  
  1271.             FROM sys.dm_db_partition_stats ps  
  1272.             INNER JOIN sys.internal_tables it ON (it.object_id = ps.object_id)  
  1273.             WHERE it.internal_type IN (202,204)  
  1274.             GROUP BY it.parent_id  
  1275.             ) AS a4 ON (a4.parent_id = a1.object_id)  
  1276.     INNER JOIN sys.all_objects a2  ON ( a1.object_id = a2.object_id )  
  1277.     INNER JOIN sys.schemas a3 ON (a2.schema_id = a3.schema_id)  
  1278.     WHERE a2.type <> N'S' and a2.type <> N'IT'  
  1279.     ORDER BY [保留空间(K)] DESC  
  1280.   
  1281. --内存查询  
  1282. SELECT TOP (10) type, SUM(single_pages_kb) AS [SPA Mem, KB]  
  1283. FROM sys.dm_os_memory_clerks  
  1284. GROUP BY type  
  1285. ORDER BY SUM(single_pages_kb) DESC  
  1286.   
  1287. SELECT TOP (10) type, SUM(multi_pages_kb) AS Memory_allocated_KB  
  1288. FROM sys.dm_os_memory_clerks  
  1289. WHERE multi_pages_kb!=0  
  1290. GROUP BY type  
  1291.   
  1292. SELECT objtype AS 'Cached Object Type',  
  1293. COUNT(*) AS 'Number of Plans',  
  1294. SUM(CAST(size_in_bytes AS BIGINT))/1024/1024 AS 'Plan Cache Size (MB)',  
  1295. AVG(usecounts) AS 'Avg Use Count'  
  1296. FROM sys.dm_exec_cached_plans  
  1297. GROUP BY objtype  
  1298.   
  1299. --I/O  
  1300. --各磁盘和数据库的吞吐量和等待时间  
  1301. SELECT b.name,c.name,c.physical_name,  
  1302. a.num_of_reads,a.num_of_writes,  
  1303. a.num_of_bytes_read,a.num_of_bytes_written,  
  1304. a.io_stall_read_ms,a.io_stall_write_ms,  
  1305. a.io_stall  
  1306. FROM sys.dm_io_virtual_file_stats(NULLNULL) a,  
  1307. sys.databases b,sys.master_files c  
  1308. WHERE a.database_id=b.database_id  
  1309. AND a.file_id=c.file_id  
  1310. AND a.database_id=c.database_id  
  1311. order by a.num_of_bytes_written +a.io_stall_read_ms  
  1312.   
  1313. --挂起的 I/O 请求和对应的数据文件  
  1314. SELECT  
  1315. database_id,file_id,  
  1316. io_stall,io_pending_ms_ticks,  
  1317. scheduler_address  
  1318. FROM sys.dm_io_virtual_file_stats(NULLNULL)t1,  
  1319. sys.dm_io_pending_io_requests as t2  
  1320. WHERE t1.file_handle = t2.io_handle  
  1321.   
  1322. SELECT object_name,COUNT(DISTINCT counter_name)  
  1323. FROM sys.dm_os_performance_counters  
  1324. GROUP BY object_name  
  1325. ORDER BY object_name  
  1326.   
  1327. --所有等待事件,共计484个  
  1328. SELECT * FROM sys.dm_os_wait_stats  
  1329. --消耗时间占据95%的等待事件  
  1330. WITH Waits AS  
  1331. (  
  1332. SELECT wait_type,wait_time_ms/1000. AS wait_time_s,  
  1333. 100.*wait_time_ms/SUM(wait_time_ms) OVER() AS pct,  
  1334. ROW_NUMBER() OVER(order by wait_time_ms DESCas rn  
  1335. FROM sys.dm_os_wait_stats  
  1336. WHERE wait_type NOT IN ('SLEEP_TASK','BROKER_TASK_STOP',  
  1337. 'SQLTRACE_BUFFER_FLUSH','CLR_AUTO_EVENT',  
  1338. 'CLR_MANUAL_EVENT','LAZYWRITER_SLEEP')  
  1339. )  
  1340. SELECT W1.wait_type,  
  1341. CAST(W1.wait_time_s AS DECIMAL(12,2)) AS wait_time_s,  
  1342. CAST(W1.pct AS DECIMAL(12,2)) AS pct,  
  1343. CAST(SUM(W2.pct) AS DECIMAL(12,2)) AS running_pct  
  1344. FROM Waits AS W1  
  1345. INNER JOIN Waits AS W2  
  1346. ON W2.rn<=W1.rn  
  1347. GROUP BY W1.rn,W1.wait_type,W1.wait_time_s,W1.pct  
  1348. HAVING SUM(W2.pct)-W1.pct<95  
  1349.   
  1350.    
  1351.   
  1352.   
  1353. SELECT SessionID = s.Session_id ,  
  1354.   resource_type ,  
  1355.   DatabaseName = DB_NAME(resource_database_id) ,  
  1356.   request_mode ,  
  1357.   request_type ,  
  1358.   login_time ,  
  1359.   host_name ,  
  1360.   program_name ,  
  1361.   client_interface_name ,  
  1362.   login_name ,  
  1363.   nt_domain ,  
  1364.   nt_user_name ,  
  1365.   s.status ,  
  1366.   last_request_start_time ,  
  1367.   last_request_end_time ,  
  1368.   s.logical_reads ,  
  1369.   s.reads ,  
  1370.   request_status ,  
  1371.   request_owner_type ,  
  1372.   objectid ,  
  1373.   dbid ,  
  1374.   a.number ,  
  1375.   a.encrypted ,  
  1376.   a.blocking_session_id ,  
  1377.   a.text  
  1378.   FROM sys.dm_tran_locks l  
  1379.   JOIN sys.dm_exec_sessions s ON l.request_session_id = s.session_id  
  1380.   LEFT JOIN ( SELECT *  
  1381.   FROM sys.dm_exec_requests r  
  1382.   CROSS APPLY sys.dm_exec_sql_text(sql_handle)  
  1383.   ) a ON s.session_id = a.session_id  
  1384.   WHERE s.session_id > 50   
  1385.   
  1386. select blocking_session_id,wait_duration_ms,session_id from sys.dm_os_waiting_tasks where blocking_session_id is not null  
  1387.   
  1388.   
  1389. sp_who active   
  1390.   
  1391.   
  1392. with tb   
  1393. as   
  1394. (   
  1395. select blocking_session_id,   
  1396. session_id,db_name(database_id) as dbname,text from master.sys.dm_exec_requests  a   
  1397. CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle)   
  1398. ),   
  1399. tb1 as   
  1400. (   
  1401. select a.*,login_time,program_name,client_interface_name,login_name,cpu_time,memory_usage*8 as 'memory_usage(KB)',   
  1402. total_scheduled_time,reads,writes,logical_reads   
  1403. from tb a inner join master.sys.dm_exec_sessions b   
  1404. on a.session_id=b.session_id   
  1405. )   
  1406. select a.*,connect_time,client_tcp_port,client_net_address from tb1 a inner join master.sys.dm_exec_connections b on a.session_id=b.session_id  
  1407.   
  1408. with tb   
  1409. as   
  1410. (   
  1411. select blocking_session_id,   
  1412. session_id,db_name(database_id) as dbname,text from master.sys.dm_exec_requests  a   
  1413. CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle)   
  1414. ),   
  1415. tb1 as   
  1416. (   
  1417. select a.*,login_time,program_name,client_interface_name,login_name,cpu_time,memory_usage*8 as 'memory_usage(KB)',   
  1418. total_scheduled_time,reads,writes,logical_reads   
  1419. from tb a inner join master.sys.dm_exec_sessions b   
  1420. on a.session_id=b.session_id   
  1421. )   
  1422. select a.*,connect_time,client_tcp_port,client_net_address from tb1 a inner join master.sys.dm_exec_connections b on a.session_id=b.session_id  
  1423.   
  1424.   
  1425. with tb   
  1426. as   
  1427. (   
  1428. select blocking_session_id,   
  1429. session_id,db_name(database_id) as dbname,text from master.sys.dm_exec_requests  a   
  1430. CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle)   
  1431. ),   
  1432. tb1 as   
  1433. (   
  1434. select a.*,login_time,program_name,client_interface_name,login_name,cpu_time,memory_usage*8 as 'memory_usage(KB)',   
  1435. total_scheduled_time,reads,writes,logical_reads   
  1436. from tb a inner join master.sys.dm_exec_sessions b   
  1437. on a.session_id=b.session_id   
  1438. )   
  1439. select a.*,connect_time,client_tcp_port,client_net_address from tb1 a inner join master.sys.dm_exec_connections b on a.session_id=b.session_id  
  1440.   
  1441. with tb   
  1442. as   
  1443. (   
  1444. select blocking_session_id,   
  1445. session_id,db_name(database_id) as dbname,text from master.sys.dm_exec_requests  a   
  1446. CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle)   
  1447. ),   
  1448. tb1 as   
  1449. (   
  1450. select a.*,login_time,program_name,client_interface_name,login_name,cpu_time,memory_usage*8 as 'memory_usage(KB)',   
  1451. total_scheduled_time,reads,writes,logical_reads   
  1452. from tb a inner join master.sys.dm_exec_sessions b   
  1453. on a.session_id=b.session_id   
  1454. )   
  1455. select a.*,connect_time,client_tcp_port,client_net_address from tb1 a inner join master.sys.dm_exec_connections b on a.session_id=b.session_id  
  1456.   
  1457.                 SELECT   
  1458.                           DB_NAME(t1.resource_database_id) AS [数据库名],  
  1459.                           t1.resource_type AS [资源类型],  
  1460.                       --    t1.request_type AS [请求类型],  
  1461.                           t1.request_status AS [请求状态],  
  1462.                       --    t1.resource_description AS [资源说明],  
  1463.                          CASE t1.request_owner_type WHEN 'TRANSACTION' THEN   
  1464.                   '事务所有'  
  1465.                                                   WHEN 'CURSOR' THEN '游标所有'   
  1466.                                                   WHEN 'SESSION' THEN '用户会话所有'  
  1467.                                                   WHEN   
  1468.                   'SHARED_TRANSACTION_WORKSPACE' THEN '事务工作区的共享所有'  
  1469.                                                   WHEN   
  1470.                   'EXCLUSIVE_TRANSACTION_WORKSPACE' THEN '事务工作区的独占所有'   
  1471.                                                   ELSE ''   
  1472.                          END AS [拥有请求的实体类型],  
  1473.                          CASE WHEN T1.resource_type = 'OBJECT'   
  1474.                              THEN OBJECT_NAME(T1.resource_ASsociated_entity_id)  
  1475.                              ELSE    
  1476.                   T1.resource_type+':'+ISNULL(LTRIM(T1.resource_ASsociated_entity_id),'')   
  1477.   
  1478.                              END AS [锁定的对象],  
  1479.                           t4.[nameAS [索引],  
  1480.                           t1.request_mode AS [锁定类型],  
  1481.                           t1.request_session_id AS [当前spid],       
  1482.                           t2.blocking_session_id AS [锁定spid],  
  1483.                       --    t3.snapshot_isolation_state AS [快照隔离状态],  
  1484.                           t3.snapshot_isolation_state_desc AS [快照隔离状态描述],  
  1485.                           t3.is_read_committed_snapshot_on AS [已提交读快照隔离]  
  1486.                           
  1487.                       FROM   
  1488.                           sys.dm_tran_locks AS t1  
  1489.                       left join   
  1490.                           sys.dm_os_waiting_tasks AS t2  
  1491.                       ON   
  1492.                           t1.lock_owner_address = t2.resource_address  
  1493.                       left join   
  1494.                           sys.databases AS t3  
  1495.                       ON t1.resource_database_id = t3.database_id  
  1496.                       left join   
  1497.                          (  
  1498.                           SELECT rsc_text,rsc_indid,rsc_objid,b.[name]  
  1499.                          FROM   
  1500.                              sys.syslockinfo a  
  1501.                          JOIN   
  1502.                              sys.indexes b   
  1503.                          ON a.rsc_indid = b.index_id and b.object_id =   
  1504.                   a.rsc_objid) t4  
  1505.                       ON t1.resource_description = t4.rsc_text  
  1506.   
  1507.   
  1508. --1,--确定服务器活动(正在活动的进程)  
  1509. SELECT es.session_id  
  1510.     ,es.program_name  
  1511.     ,es.login_name  
  1512.     ,es.nt_user_name  
  1513.     ,es.login_time  
  1514.     ,es.host_name  
  1515.     ,es.cpu_time  
  1516.     ,es.total_scheduled_time  
  1517.     ,es.total_elapsed_time  
  1518.     ,es.memory_usage  
  1519.     ,es.logical_reads  
  1520.     ,es.reads  
  1521.     ,es.writes  
  1522.     ,st.text  
  1523. FROM sys.dm_exec_sessions es  
  1524.     LEFT JOIN sys.dm_exec_connections ec  
  1525.         ON es.session_id = ec.session_id  
  1526.     LEFT JOIN sys.dm_exec_requests er  
  1527.         ON es.session_id = er.session_id  
  1528.     OUTER APPLY sys.dm_exec_sql_text (er.sql_handle) st  
  1529. WHERE es.session_id > 50    -- < 50 system sessions  
  1530. ORDER BY es.cpu_time DESC  
  1531.   
  1532.   
  1533. GO  
  1534. --3,--查找有关被阻塞的请求的信息  
  1535. SELECT session_id ,status ,blocking_session_id  
  1536.     ,wait_type ,wait_time ,wait_resource  
  1537.     ,transaction_id  
  1538. FROM sys.dm_exec_requests  
  1539. WHERE status = N'suspended';  
  1540. GO  
  1541.   
  1542. --查询语句执行次数及CPU开销  
  1543. SELECT TOP 10  
  1544.     total_worker_time/execution_count AS avg_cpu_cost,  
  1545.     execution_count,  
  1546.     (SELECT SUBSTRING(text, statement_start_offset/2 + 1,  
  1547.       (CASE WHEN statement_end_offset = -1  
  1548.             THEN LEN(CONVERT(nvarchar(max), text)) * 2  
  1549.             ELSE statement_end_offset  
  1550.        END - statement_start_offset)/2)  
  1551.      FROM sys.dm_exec_sql_text(sql_handle)) AS query_text  
  1552. FROM sys.dm_exec_query_stats  
  1553. ORDER BY [avg_cpu_cost] DESC;  
  1554.   
  1555. --计算可运行状态下的工作进程数量  
  1556. SELECT COUNT(*) AS workers_waiting_for_cpu, t2.Scheduler_id  
  1557. FROM sys.dm_os_workers AS t1, sys.dm_os_schedulers AS t2  
  1558. WHERE t1.state = 'RUNNABLE' AND  
  1559.     t1.scheduler_address = t2.scheduler_address AND  
  1560.     t2.scheduler_id < 255  
  1561. GROUP BY t2.scheduler_id;  
  1562.   
  1563.   
  1564. --查询工作进程在可运行状态下花费的时间  
  1565.   
  1566. SELECT SUM(signal_wait_time_ms)  
  1567. FROM sys.dm_os_wait_stats;  
  1568.   
  1569. --每次执行占CPU最多的查询  
  1570. SELECT TOP 30  
  1571.     total_worker_time/execution_count AS avg_cpu_cost,   
  1572.     plan_handle, execution_count,  
  1573.     (SELECT SUBSTRING(text, statement_start_offset/2 + 1,  
  1574.        (CASE WHEN statement_end_offset = -1  
  1575.                THEN LEN(CONVERT(nvarchar(max), text)) * 2  
  1576.                ELSE statement_end_offset  
  1577.         END - statement_start_offset)/2)  
  1578.      FROM sys.dm_exec_sql_text(sql_handle)) AS query_text,--p.query_plan,   
  1579. q.text,plan_handle  
  1580. from sys.dm_exec_query_stats  as r  
  1581.     cross apply sys.dm_exec_sql_text(r.sql_handle) as qt   
  1582.     cross apply sys.dm_exec_query_plan(plan_handle) p  
  1583.     cross apply sys.dm_exec_sql_text(plan_handle) as q  
  1584. ORDER BY [avg_cpu_cost] DESC;  
  1585.   
  1586.    
  1587.   
  1588. --找出工作负荷中运行最频繁的查询  
  1589. SELECT TOP 10 total_worker_time, plan_handle,execution_count,  
  1590.       (SELECT SUBSTRING(text, statement_start_offset/2 + 1,  
  1591.           (CASE WHEN statement_end_offset = -1  
  1592.                   THEN LEN(CONVERT(nvarchar(max),text)) * 2  
  1593.                   ELSE statement_end_offset  
  1594.            END - statement_start_offset)/2)  
  1595.        FROM sys.dm_exec_sql_text(sql_handle)) AS query_text  
  1596. FROM sys.dm_exec_query_stats  
  1597. ORDER BY execution_count DESC;  
  1598.   
  1599. --SQL Server 在优化查询计划上花费的时间  
  1600. SELECT *  
  1601. FROM sys.dm_exec_query_optimizer_info  
  1602. WHERE counter = 'optimizations' OR counter = 'elapsed time';  
  1603.   
  1604. --被编译最多的查询  
  1605. SELECT TOP 10 plan_generation_num, execution_count,plan_handle,  
  1606.     (SELECT SUBSTRING(text, statement_start_offset/2 + 1,  
  1607.       (CASE WHEN statement_end_offset = -1  
  1608.             THEN LEN(CONVERT(nvarchar(max),text)) * 2  
  1609.             ELSE statement_end_offset  
  1610.        END - statement_start_offset)/2)  
  1611.      FROM sys.dm_exec_sql_text(sql_handle)) AS query_text  
  1612. FROM sys.dm_exec_query_stats  
  1613. WHERE plan_generation_num >1  
  1614. ORDER BY plan_generation_num DESC;  
  1615.   
  1616. --检查分配给优化查询计划的过程高速缓冲的内存  
  1617. DBCC MEMORYSTATUS  
  1618.   
  1619. --查询缓冲区消耗内存总量  
  1620. SELECT  SUM(multi_pages_kb + virtual_memory_committed_kb   
  1621.             + shared_memory_committed_kb    
  1622.             + awe_allocated_kb)/1024 AS [Used by BPool, Mb]  
  1623. FROM sys.dm_os_memory_clerks  
  1624. WHERE type = 'MEMORYCLERK_SQLBUFFERPOOL';  
  1625.   
  1626. --查询消耗缓冲区大部分页面的内部组件  
  1627. SELECT TOP 10 type, SUM(single_pages_kb) AS stolen_mem_kb  
  1628. FROM sys.dm_os_memory_clerks  
  1629. GROUP BY type  
  1630. ORDER BY 

你可能感兴趣的:(MSSQL2005性能调优--DBA需掌握系统字典sql)