一、判斷CPU瓶頸(Processor)
1, %processor time
如果該值持續超過95%,表明瓶頸是CPU。可以考慮增加一個處理器或換一個更快的處理器。
如果服務器專用於sql server,可接受的最大上限是80-85%
2, processor queue length大於2 (大於處理器個數+1).可以確定CPU瓶頸
如果發現processor queue length顯示的隊列長度超過2,而處理器的利用率卻一直很低,或許更應該去解決處理器阻塞問題,這里處理器一般不是瓶頸。
3, CPU空閑時間為零(zero percent idle CPU)
4, %User Time過高的用戶占用CPU時間
%User time(processor_total)表示耗費CPU的數據庫操作,如排序,執行aggregate functions等。如果該值很高,可考慮增加索引,盡量使用簡單的表聯接,水平分割大表格等方法來降低該值
5, %Priviliaged Time過高的系統占用CPU時間(長期大於90%或者95%)
%Privileged Time:(CPU內核時間)是在特權模式下處理線程執行代碼所花時間的百分比。如果該參數值和"hysical Disk"參數值一直很高,表明I/O有問題。可考慮更換更快的硬盤系統。另外設置Tempdb in RAM,減低"max async IO","max lazy writer IO"等措施都會降低該值。
6, % DPC Time 越低越好。
在多處理器系統中,如果這個值大於50%並且Processor:% Processor Time非常高,加入一個網卡可能會提高性能,提供的網絡已經不飽和。
7, Inetinforivate Bytes
此進程所分配的無法與其它進程共享的當前字節數量。如果系統性能隨着時間而降低,則此計數器可以是內存泄漏的最佳指示器。
CPU資源成為系統性能的瓶頸的征兆:
很慢的響應時間(slow response time)
CPU空閑時間為零(zero percent idle CPU)
過高的用戶占用CPU時間(high percent user CPU)
過高的系統占用CPU時間(high percent system CPU)
長時間的有很長的運行進程隊列(large run queue size sustained over time)
二、判斷內存瓶頸與內存泄漏
1,如果發生了內存泄漏,process\private bytes計數器和process\working set 計數器的值往往會升高,同時avaiable Mbytes的值會降低。
2, Available Mbytes(剩余物理內存數)
如果該值很小(4 MB 或更小),則說明計算機上總的內存可能不足,或某程序沒有釋放內存。
3,如果Process\Private Bytes計數器和Process\Working Set計數器的值在長時間內持續升高,同時Memory\Available bytes計數器的值持續降低,則很可能存在內存泄漏。
內存資源成為系統性能的瓶頸的征兆:
很高的換頁率(high pageout rate);
進程進入不活動狀態;
交換區所有磁盤的活動次數可高;
過高的全局系統CPU利用率;
內存不夠出錯(out of memory errors)
三、定位磁盤瓶頸
1, % Disk Time 和Avg.Disk Queue Length 的值 (應不大於組成物理磁盤的主軸數的 1.5 到2倍) 很高,而Page Reads/sec頁面讀取操作速率很低,則可能存在磁盤瓶徑。
2,Physical Disk\ Disk Reads/sec and Disk Writes/sec 大於20 ms,則有可能磁盤瓶頸
(%Disk Time %:指所選磁盤驅動器忙於為讀或寫入請求提供服務所用的時間的百分比。如果三個計數器都比較大,那么硬盤不是瓶頸。如果只有%Disk Time比較大,另外兩個都比較適中,硬盤可能會是瓶頸。在記錄該計數器之前,請在Windows 2000 的命令行窗口中運行diskperf -yD。若數值持續超過80%,則可能是內存泄漏。
Avg.Disk Queue Length:指讀取和寫入請求(為所選磁盤在實例間隔中列隊的)的平均數。該值應不超過磁盤數的1.5~2 倍。要提高性能,可增加磁盤。注意:一個Raid Disk實際有多個磁盤。
使用 Current Disk Queue Length 和 % Disk Time 計數器來檢測磁盤子系統的瓶頸。如果Current Disk Queue Length 和 % Disk Time 的值始終較高,可以考慮升級磁盤驅動器或將某些文件移動到其他磁盤或服務器。
3,Avg.Disk sec/Transfer 盤中寫入數據的平均時間,單位是秒,一般來說,定義該值小於15ms最為優異,介於15-30ms之間為良好,30-60ms之間為可以接受,超過60ms則需要考慮更換硬盤或硬盤的RAID方式了
4,Disk Transfers/sec 指在此盤上讀取/寫入操作速率。正常值<(Disk Bytes/sec)/3,此值過大表示系統要求的IO速度已接近硬盤的最大速度,要更換更快的硬盤。
備注:
如果使用 RAID 設備,% Disk Time 計數器會指示大於 100% 的值。
I/O資源成為系統性能的瓶頸的征兆 :
過高的磁盤利用率(high disk utilization)
太長的磁盤等待隊列(large disk queue length)
等待磁盤I/O的時間所占的百分率太高(large percentage of time waiting for disk I/O)
太高的物理I/O速率:large physical I/O rate(not sufficient in itself) 過低的緩存命中率(low buffer cache hit ratio(not sufficient in itself)) 太長的運行進程隊列,但CPU卻空閑(large run queue with idle CPU)
四、定位網絡瓶頸
Byte Total/sec 表示網絡中接受和發送字節的速度,可以用該計數器來判斷網絡是否存在瓶頸(參考值:該計數器和網絡帶寬相除,<50%)
SQL Server 相關
1, SQLServer:CacheManage ->Cache Hit Ratio 顯示在高速緩存中找到數據的命中率。如果數值持續小於 85%, 則表示內存有問題。
2, SQLServer:Locks->Lock Waits/sec 顯示在當前進程完成之前強制其他進程等待的每秒鎖定請求的數量。如果該值始終大於 0, 則表示事務有問題。
3, SQLServer:Databases->Transactions/sec 每秒為數據庫啟動的事務數
Thread
ContextSwitches/sec: (實例化inetinfo 和dllhost 進程) 如果你決定要增加線程字節池的大小,你應該監視這三個計數器(包括上面的一個)。增加線程數可能會增加上下文切換次數,這樣性能不會上升反而會下降。如果十個實例的上下文切換值非常高,就應該減小線程字節池的大小。