日期:2013-02-03  浏览次数:20414 次

  使用SQL waits阻塞对全体功用的影响

  SQL Server 2000提供了76种等待类型来提供等待报告。SQL Server 2005提供了多余100个等待类型来跟踪使用程序功用。任何时间1个用户连接在等待时,SQL Server会累加等待时间。例如使用程序请求资源例如I/O,锁或内存,可以等待资源直到可用。这些等待信息可以跨所有连接将被汇总和分类,所以功用配置可以从给定的负载获得。因此,SQL等待类型从使用程序负载或用户观点识别和分类用户(或线程)等待。

  这个查询列出了在SQL Server中前10位的等待。这些等待时累积的,但是你可以使用DBCC SQLPERF ([sys.dm_os_wait_stats], clear)重置这个计数器。

select top 10 *
from sys.dm_os_wait_stats
order by wait_time_ms desc

  下列是输出,要留意几个关键点:

  ◆一些等待是正常的例如后台线程的等待,例如lazy writer组件。

  ◆一些会话为获取共享锁等待很长时间

  ◆信号等待是在一个任务线程获取对资源访问到它被拿到CPU上调度执行这段时间。长时间的信号等待也许意味着很高的CPU争用。

wait_type   waiting_tasks_count wait_time_ms   max_wait_time_ms signal_wait_time_ms 
------------------ -------------------- -------------------- -------------------- -------
LAZYWRITER_SLEEP   415088        415048437      1812         156
SQLTRACE_BUFFER_FLUSH 103762        415044000      4000         0
LCK_M_S        6          25016812       23240921       0
WRITELOG       7413         86843        187         406
LOGMGR_RESERVE_APPEND 82          82000        1000         0
SLEEP_BPOOL_FLUSH   4948         28687        31          15
LCK_M_X        1          20000        20000        0
PAGEIOLATCH_SH    871         11718        140         15
PAGEIOLATCH_UP    755         9484         187         0
IO_COMPLETION     636         7031         203         0

  为了分析等待形状,你需求获取数据,用于当前分析。附录B提供了2个示例的存储过程。