使用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個樣本的預存程序。