1. 程式人生 > >常用 監控SQLSERVER效能計數器

常用 監控SQLSERVER效能計數器

---CPU
效能計數器說明 CPU:
1.System:%Total Processor Time  平均CPU利用率。指處理器執行非閒置執行緒時間的百分比,測量處理器繁忙的時間 這個計數器設計成用來作為處理器活動的主要指示器,可以選擇單個CPU例項,也可以選擇Total
2.System:%Processor Queue Length 等待處理器處理的執行緒數(正常範圍為cpu數的1~3倍)
3.Processor: %User Time  非核心級應用程式佔用的時間(如SQLServer或反病毒軟體).表示耗費CPU的資料庫操作,如排序等。如果該值很高,可
考慮增加索引,儘量使用簡單的表聯接,水平分割大表格等方法來降低該值。
4.Processor: %Interrupts/Sec 處理器每秒相應中斷次數。即 處理器正在處理的來自應用程式或硬體的中斷的數量。(持續超過1000表示存在問題,可能是糟糕驅動、硬體過度使用或硬體存成問題)
5.Process:%Processor Time   指處理器執行非閒置執行緒時間的百分比,測量處理器繁忙的時間 這個計數器設計成用來作為處理器活動的主要指示器,可以選擇單個CPU例項,也可以選擇Total
  如果該引數值持續超過95%,表明瓶頸是CPU。可以考慮增加一個處理器或換一個更快的
6.Processor:%Privileged Time 
  如果該引數值和"Physical Disk"引數值一直很高,表明I/O有問題。可考慮更換更快的
硬碟系統。另外設定Tempdb in RAM,減低"max async IO","max lazy writer IO"等措施都

---DISK

DISK(Physical Disk):
佇列長度計數器
1.%Avg.Disk Queue Length 跟蹤在取樣時間段內在佇列中等待磁碟的請求數和正獲取得服務的請求數.即 指讀取和寫入請求(為所選磁碟在例項間隔中列隊的)的平均數。該值應不超過磁碟數的1.5~2倍。要提高效能,可增加磁碟。
2.%Current Disk Queue Length 處於等待狀態和正獲得服務的請求數。即 指示被掛起的磁碟 I/O 請求的數量。如果這個值始終高於 2, 就表示產生了擁塞

吞吐量計數器
3.%Disk Bytes/Sec 測量傳輸速率,是磁碟吞吐量的重要指標。即在讀寫操作中,從磁碟傳出或傳送到磁碟的位元組速率
4.%Disk Read Bytes/Sec
5.%Disk Write Bytes/Sec
利用率計數器
6.%Disk Time  計數器監視磁碟忙於讀/寫活動所用時間的百分比.在系統監視器中,PhysicalDisk: % Disk Time 計數器監視磁碟忙於讀/寫活動所用時間的百分比。
如果 PhysicalDisk: % Disk Time 計數器的值較高(大於 90%),請檢查 PhysicalDisk: Current Disk Queue Length 計數器瞭解等待進行磁碟訪問的系統請求數量。
等待 I/O 請求的數量應該保持在不超過組成物理磁碟的軸數的 1.5 到 2 倍。大多數磁碟只有一個軸,但獨立磁碟冗餘陣列 (RAID) 設 備通常有多個軸。
硬體 RAID 裝置在系統監視器中顯示為一個物理磁碟。通過軟體建立的多個 RAID 裝置在系統監視器中顯示為多個例項。
可以使用 Current Disk Queue Length 和 % Disk Time 計數器的值檢測磁碟子系統中的瓶頸。如果 Current Disk Queue Length 和 % Disk Time 計數器的值一直很高,則考慮下列事項:
a.使用速度更快的磁碟驅動器。
b.將某些檔案移至其他磁碟或伺服器。
c.如果正在使用一個 RAID 陣列,則在該陣列中新增磁碟。

注:
(如果使用RAID裝置,%Disk Time計數器顯示的值可以大於100%。如果大於100%,則使用Avg. disk queue length計數器決定正在等待磁碟訪問的系統請求的平均數) 

7.%Disk Read Time 和 %Disk Write Time 磁碟驅動器用於處理讀取/寫入請求的時間百分比
8.%Idle Time 磁碟系統沒有處理請求且佇列中沒有請求的時間百分比
9.Disk Transfers/Sec Disk Reads/Sec  Disk Writes/Sec
其他
10.%Avg.Disk Sec/Transfer 報告資料傳輸速度(秒為單位),測量每次傳輸的平均時間(全部往返時間)。 即 寫入或讀取操作時向磁碟傳送或從磁碟傳出位元組的平均數
11.%Avg.Disk Sec/Read  %Avg.Disk Sec/Write 報告從磁碟讀取/寫入資料的速度(秒為單位)
12.%Avg.Disk Time 報告選定磁碟驅動器用於處理讀取與寫入請求的時間百分比
13.%Avg.Disk Bytes/Transfer 測量輸入/輸出操作的(Avg.Disk Bytes/Read Avg.Disk Bytes/Write)
(磁碟瓶頸:磁碟活動數高、持續磁碟佇列長、大量頁面交換)

根據Disk sec/Transfer進行分析
一般來說,定義該數值小於15ms為Excellent,介於15~30ms之間為良好,30~60ms之間為可以接受,超過60ms則需要考慮更換硬碟或是硬碟的RAID方式了

----MEMORY
Memory:
1.Available Mbytes 當前還有多少記憶體可用(記憶體列表中的Zeroed\Free\Standby空間相加得到)即 可用實體記憶體的數量。
2.Pages/Sec 是指為解析硬頁錯誤從磁碟讀取或寫入磁碟的頁數。建議閾值20。Pages/sec的技術持續高於幾百,可能有記憶體問題.
3.Page Faults/sec說明每秒發生頁面失效次數,頁面失效次數越多,說明作業系統向記憶體讀取的次數越多。
此事需要檢視Pages Read/sec的計數值,該計數器的閥值為10ms,如果計數值超過10ms
4.Pool Nonpaged Bytes 未分頁池系統記憶體區域中的 RAM 數量 
5.Committed Bytes 已分配給物理 RAM 用於儲存或分配給頁面檔案的虛擬記憶體 
6.Process: %Working Set 分配給相應程序的提交記憶體量,它可能包括當前位於實體記憶體中的共享記憶體和私有內容
7.Page Writes/sec 是指為了釋放實體記憶體空間而將頁寫入磁碟的次數。
8.Pages Input/sec 指為解決頁錯誤從磁碟上讀取的頁數。
9.Pages Output/sec 是指為了釋放實體記憶體空間而寫入磁碟的頁數。
10.SQL Server:Buffer Manager:Cache Hit Ratio 快取命中率
11.SQL Server:Buffer Manager:Total Pages 快取池總頁面數
12.SQL Server:Buffer Manager:Total Server Memory(KB) 指出SqlServer伺服器當前使用了多少記憶體;Target Server Memory(KB)指出SqlServer要高效執行需要多少記憶體,它基於SqlServer保留的緩衝區數量。

如果發生了記憶體洩漏,Process\Private Bytes計數器和Process\Working set 計數器的值往往會升高,同時Available bytes會降低。


如果Pages Read/sec很低,同時%Disk Time和Average Disk Queue Length的值很高,則可能有磁碟瓶頸。
但是,如果佇列長度增加的同時Pages Read/sec並未降低,則是記憶體不足。

如果Process不見了,修改登錄檔HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance 下的Disable Performance Counters值為0.

-----NETWORK

網路(Network Interface )
1.Bytes Received/sec 使用本網路介面卡接收的位元組數 
2.Bytes Sent/sec 使用本網路介面卡傳送的位元組數 
3.Bytes Total/sec 使用本網路介面卡傳送和接收的位元組數 

Server 
Bytes Received/sec 把此計數器與網路介面卡的總頻寬相比較,確定網路連線是否產生瓶頸 

--------SQLSERVER TIMES

SQL Server(訪問方法) Access Methods
1.Page Splits/sec 每秒由於索引頁溢位而發生的頁拆分數.如果發現頁分裂的次數很多,考慮提高Index的填充因子.資料頁將會有更多的空間保留用於做資料的填充,從而減少頁拆分 
2.Pages Allocated/sec 在此 SQL Server 例項的所有資料庫中每秒分配的頁數。這些頁包括從混合區和統一區中分配的頁 
3.Full Scans/sec 每秒不受限制的完全掃描數. 這些掃描可以是基表掃描,也可以是全文索引掃描 
4.Re-Compilations/Sec 每秒語句重新編譯的次數。計算語句重新編譯被觸發的次數。一般來說,這個數最好較小,儲存過程在理想情況下應該只編譯一次,
然後執行計劃被重複使用. 如果該計數器的值較高,或許需要換個方式編寫儲存過程,從而減少重編譯的次數 

SQL Server: Databases 
1.Log Flushes/sec 每秒日誌重新整理數目 
2.Active Transactions 資料庫的活動事務數 
3.Backup/Restore Throughput/sec 每秒資料庫的備份和還原操作的讀取/寫入吞吐量。例如,並行使用多個備份裝置或使用更快的裝置時,可以測量資料庫備份操作效能的變化情況。
資料庫的備份或還原操作的吞吐量可以確定備份和還原操作的程序和效能 

SQL Server General Statistics 
1.User Connections 系統中活動的SQL連線數. 該計數器的資訊可以用於找出系統的最大併發使用者數 
2.Temp Tables Creation Rate 每秒建立的臨時表/表變數的數目 
3.Temp Tables For Destruction 等待被清除系統執行緒破壞的臨時表/表變數數 

SQL Server Locks 
1.Number of Deadlocks/sec 指每秒導致死鎖的鎖請求數. 死鎖對於應用程式的可伸縮性非常有害, 並且會導致惡劣的使用者體驗. 該計數器必須為0 
2.Average Wait Time (ms) 每個導致等待的鎖請求的平均等待時間。 
3.Lock requests/sec 鎖管理器每秒請求的新鎖和鎖轉換數. 通過優化查詢來減少讀取次數, 可以減少該計數器的值 

SQL Server:Memory Manager 
1.Total Server Memory (KB) 從緩衝池提交的記憶體(這不是 SQL Server 使用的總記憶體) 
2.Target Server Memory (KB) 伺服器能夠使用的動態記憶體總量 
3.SQL Cache Memory(KB) 伺服器正在用於動態 SQL 快取記憶體的動態記憶體總數 
4.Memory Grants Pending 指每秒等待工作空間記憶體授權的程序數. 該計數器應該儘可能接近0,否則預示可能存在著記憶體瓶頸 

SQL Server Buffer Manager (頁面計數器)
1.緩衝區快取記憶體命中率 (Buffer CacheHit Ratio %)
指在緩衝區快取記憶體中找到而不需要從磁碟中讀取的頁的百分比。該比率是快取命中總次數與快取查詢總次數之比。經過很長時間後,該比率的變化很小。由於從快取中讀取資料比從磁碟中讀取資料的開銷小得多,一般希望該比率高一些。 該指標的值最好為90% 或更高。通常可以通過增加 SQL Server
可用的記憶體數量來提高該指標的值。增加記憶體直到這指標的值持續高於90%,表示90%
以上的資料請求可以從資料緩衝區中獲得所需資料。 即 快取命中率,在緩衝區快取記憶體中找到而不需要從磁碟中讀取(物理I/O)的頁的百分比. 如果該值較低則可能存在記憶體不足或不正確的索引 
2.Page Reads/sec 每秒發出的物理資料庫頁讀取數。此統計資訊顯示的是所有資料庫間的物理頁讀取總數。由於物理 I/O 的開銷大,可以通過使用更大的資料快取、智慧索引、更有效的查詢或更改資料庫設計等方法,將開銷降到最低 
3.Page Writes/sec 每秒執行的物理資料庫頁寫入數 
4.Page Life Expectancy 頁若不被引用將在緩衝池中停留的秒數 
5.Lazy Writes/Sec 每秒被緩衝區管理器的惰性編寫器寫入的緩衝區數 
6.Checkpoint Pages/Sec 由要求重新整理所有髒頁的檢查點或其他操作每秒重新整理到磁碟的頁數   
7.SQLServer:快取記憶體命中率 (Cache Hit Ratio %) 
  該值越高越好。如果持續低於80%,應考慮增加記憶體。
	指快取記憶體命中次數和查詢次數的比率。在SQL Server中,Cache包括Log Cache,Buffer
Cache以及Procedure Cache,該指標是指所有Cache的命中率,是一個總體的比率。 該指標的值越高越好。如果該指標的值持續低於80%,就需要增加更多的記憶體。  

8.平均閂等待時間(毫秒) (Average Latch Wait Time(ms))
	指一個SQL Server執行緒必須等待一個閂的平均時間。 如果該指標的值很高,則系統可能正經歷嚴重的資源競爭問題。  
	
9.閂等待/秒(Latch Waits/sec) 
	指在一個閂上每秒的平均等待數量。 如果該指標的值很高,則系統可能正經歷嚴重的資源競爭問題。 




在SQL Server上,涉及I/O的計數器有:
Average read bytes/sec,平均每秒的讀取位元組數  
Average write bytes/sec,平均每秒的寫入位元組數
Reads/sec, 每秒多少讀
writes/sec,每秒多少寫
Disk read bytes/sec, 每秒讀取的傳輸速率
Disk write bytes/sec,每秒寫入的傳輸速率
Average disk sec/read, 平均每個讀花的時間,小於10ms表示效能很好,在10ms~20ms之間表示效能可以接受,如果大於20ms,說明存在I/O問題;
Average disk sec/write,平均每個寫花的時間,小於10ms表示效能很好,在10ms~20ms之間表示效能可以接受,如果大於20ms,說明存在I/O問題。
Average disk queue length,在磁碟等待的IO個數,最好在1.5和2倍轉軸個數(spindles)以內,如果高於這個值,一般說明IO子系統有一定的問題,但現在普遍使用RAID或者磁碟虛擬化,如果不詳細瞭解具體的I/O子系統配置,很難從這個計數器判斷出問題。



計算每磁碟的I/O數
  
   每磁碟的I/O數可用來與磁碟的I/O能力進行對比,如果經過計算得到的每磁碟I/O數超過了磁碟標稱的I/O能力,則說明確實存在磁碟的效能瓶頸。
  
   每磁碟I/O計算方法
  
   RAID0計算方法:(Reads +Writes)/Number of Disks
  
   RAID1計算方法:(Reads +2*Writes)/2
  
   RAID5計算方法:[Reads +(4*Writes)]/Number of Disks
  
   RAID10計算方法:[Reads +(2*Writes)]/Number of Disks

raid0 就是把多個(最少2個)硬碟合併成1個邏輯盤使用,資料讀寫時對各硬碟同時操作,不同硬碟寫入不同資料,速度快。   
raid1就是同時對2個硬碟讀寫(同樣的資料)。強調資料的安全性。比較浪費。    
raid5也是把多個(最少3個)硬碟合併成1個邏輯盤使用,資料讀寫時會建立奇偶校驗資訊,並且奇偶校驗資訊和相對應的資料分別儲存於不同的磁碟上。當RAID5的一個磁碟資料發生損壞後,利用剩下的資料和相應的奇偶校驗資訊去恢復被損壞的資料。相當於raid0和raid1的綜合。    
raid10就是raid1+raid0,比較適合速度要求高,又要完全容錯,當然¥也很多的時候。最少需要4塊硬碟(注意:做raid10時要先作RAID1,再把數個RAID1做成RAID0,這樣比先做raid0,再做raid1有更高的可靠性)