(4.20)sql server性能指標、性能計數器
常規計數器
收集操作系統服務器的服務器性能信息,包括Processor、磁盤、網絡、內存
Processor 處理器
1.1 % Processor Time指處理器用來執行非閑置線程時間的百分比。通過此計數器可以確定服務器當前CPU使用百分比。
1.2 % Privileged Time是在特權模式下進程線程執行代碼所花時間的百分比。當調用 Windows 系統服務時,此服務經常在特權模式運行,以便獲取對系統專有數據的訪問。
PhysicalDisk物理磁盤(某個RAID)
2.1 Avg. Disk Queue Length等待請求的隊列長度,若此值過大,說明磁盤存在瓶頸,自然磁盤延遲的值也會過大。
2.2 Avg. Disk sec/Read;Avg. Disk sec/Transfer;Avg. Disk sec/Write這三個計數器表示磁盤每次讀寫需要多少時間,表示磁盤的延遲情況,以秒為單位,若延遲超過25mm表示磁盤性能較差。
LogicalDisk邏輯磁盤(某個卷)
3.1 % Free Space某個磁盤的空閑百分比;Free Megabytes 磁盤剩余大小MB
3.2 Disk Read Bytes/sec;Disk Transfers/sec;Disk Write Bytes/sec這三個計數器表示每秒磁盤的讀寫情況,表示磁盤的IO性能(iops)
Memory 內存
4.1 Available Mbytes可以內存大小MB,此內存能立刻分配給一個進程或系統使用。它等於分配給待機(緩存的)、空閑和零分頁列表內存的總和。
4.2 Cache Bytes 系統使用的內存
4.3 Commit Limit可以申請的內存總大小(虛擬內存和物理內存);Committed Bytes已經使用的內存大小(虛擬內存和物理內存);均是以Byte(字節)為單位。
4.4 Free System Page Table Entries指系統當前未使用的頁表項數目。表示內存是否空閑。
4.5 Page Faults/sec 每秒出錯頁面的數量,也就是未在內存中命中的頁面數。因此伴隨着Pages/sec計數器是由於出錯頁面從磁盤讀取數據頁的速度。此值越大說明內存可能存在一定瓶頸,或者存在大量數據存取。
Network Interface 網絡接口
5.1 Current Bandwidth指以位/每秒估計的網絡接口的當前帶寬。對於那些帶寬不變的或無法估計出准確數據的界面,這個值為名義帶寬。
5.2 Bytes Received/sec;Bytes Sent/sec;Bytes Total/sec每秒種發送和接收的字節數,表示當前網絡的使用情況。
5.3 Output Queue Length輸出數據包隊列,此值大於2說明傳輸存在延遲。
5.4 Packets Outbound Discarded 被選為丟棄的數據包數目,丟棄的原因可能是釋放緩沖空間。Packets Outbound Errors 由於錯誤不能傳輸的數據包數目
5.5 Packets Received Discarded 被選為丟棄的數據包數目,丟棄的原因可能是釋放緩沖空間。Packets Received Errors 由於錯誤不能傳輸的數據包數目
SQL Server計數器(參考官網:https://docs.microsoft.com/zh-cn/sql/relational-databases/performance-monitor/use-sql-server-objects?view=sql-server-2017)
SQL Server中的Access Methods對象提供監視訪問數據庫中的邏輯數據的計數器;Buffer Manager計數器監視對磁盤上的數據庫也的物理訪問。
Access Methods 存取方式
Access Methods監視用於訪問數據庫中存儲的數據的方法有助於確定是否可以通過添加或修改索引、添加或移動分區、添加文件或文件組、對索引進行碎片整理或者重寫查詢來提高查詢性能。 Access Methods 計數器也可用於監視數據庫中數據、索引和可用空間的數量,從而指示每個服務器實例的數據卷和碎片。索引的碎片過多會降低性能。
1.1 Page Splits/sec每秒由於索引頁溢出而發生的頁拆分數。此數據越大表示某表的修改頻率較高,且要確認該索引是否適合建立該字段上。
1.2 Workfiles Created/sec每秒創建的工作文件數
1.3 Worktables Created/sec每秒創建的工作表數
Buffer Manager 緩存管理
監視用於存儲數據頁的內存;讀取和寫入數據庫頁時的物理io等,通過此對象可以判斷是否存在物理內存瓶頸可以了解服務器的查詢性能等等。
2.1 Buffer cache hit ratio命中高速緩沖區頁的百分比。若此值過低說明可能內存存在一定瓶頸
2.2 Database pages緩沖池中數據庫內容的頁數
2.3 Page life expectancy頁指示頁面在沒有引用的情況下,在此節點的緩沖池中停留的時間(以秒計)。此值若降低說明,服務器頻繁查詢數據庫中數據。
2.4 Checkpoint pages/sec Checkpoint的執行頻率,若執行的頻率過高。則說明服務器過於頻繁的修改數據。
2.5 Lazy writes/sec 若懶寫入過於頻繁,說明沒有空閑的緩沖區供使用,內存可能存在一定瓶頸。“惰性編寫器”是一個系統進程,用於成批刷新臟的過期的緩沖區(包含更改的緩沖區,必須將這些更改寫回磁盤,才能將緩沖區重用於其他頁),並使它們可用於用戶進程。
Memory Manager 內存管理
監視總體的服務器內存使用情況,以估計用戶活動和資源使用,有助於查明性能瓶頸。
3.1 Memory Grants Pending指定等待工作空間內存授權的進程總數。指等待分配內存的進程數量,若此值過高或內存或磁盤存在一定瓶頸。
3.2 Target Server Memory (KB);Total Server Memory (KB)理想上能使用內存量與內存管理器提交的內存量。若此兩值存在差異則說明內存異常。
General Statistics 常規統計
4.1 User Connections;Logins/sec;Logouts/sec 用戶並發情況
4.2 Processes blocked當前阻塞數量
4.3 Temp Tables For Destruction等待被清除系統線程破壞的臨時表/表變量數。無用的臨時表和表變量。
SQL Statistics; Wait Statistics請求與等待統計
5.1 Batch Requests/sec;SQL Compilations/sec;SQL Re-Compilations/sec每秒的請求、編譯和重編譯的次數,這些對於優化供參考。
5.2 Lock waits等待鎖的進程數。
5.3 Log write waits等待寫入日志緩存的進程數
5.4 Page IO latch waits與頁 I/O 閂鎖相關的統計信息。用於判斷內存或磁盤的瓶頸情況
5.5 Page latch waits與頁閂鎖(不包括 I/O 閂鎖)相關的統計信息。用於判斷內存或磁盤的瓶頸情況
Databases針對數據庫級別
6.1 Log Flush Wait Time;Log Flushes/sec日志刷新等待和頻率,若數據異常則可能存在磁盤瓶頸
6.2 Transactions/sec 事務數
Locks鎖
7.1 Lock Requests/sec;Lock Timeouts/sec鎖請求頻率;鎖超時頻率
7.2 Number of Deadlocks/sec 死鎖情況。
CPU
- Windows -Processor
指標名稱 |
指標描述 |
指標范圍 |
指標單位 |
CPU利用率 (% Processor Time) |
% Processor Time指處理器執行非閑置線程時間的百分比。這個計數器設計成用來作為處理器活動的主要指示器。它通過在每個時間間隔中衡量處理器用於執行閑置處理線程的時間,並且用100%減去該值得出。可將其視為范例間隔用於做有用工作的百分比。 |
根據應用系統情況,在80%±5%范圍內波動為宜。過低,則服務器CPU利用率不高;過高,則CPU可能成為系統的處理瓶頸。 |
% |
中斷率 (Interrupts/sec.) |
每秒鍾設備中斷處理器的次數。在完成一個任務或需要注意時,裝置會發出中斷訊號給處理器。可以產生中斷的裝置包括系統定時器、鼠標、數據通訊聯機、網絡卡以及其它的外部裝置。在中斷過程中,一般的執行緒執行將被暫停,而且一個中斷可以使處理器切換到另一個具有較高優先等級的執行緒。頻率中斷是頻繁和周期性的,並且中斷動作在背景執行。 |
取決於處理器,越低越好;不宜超過1,000; 如果該值顯著增加而系統活動沒有相應的增加,則表明存在硬件問題,需要檢查引起中斷的網絡適配器、磁盤或其他硬件。 |
次/sec |
系統調用率 System Call/sec. |
指運行在計算機上的所有處理器調用操作系統服務例行程序的綜合速率。這些例行程序執行所有在計算機上的如安排和同步活動等基本的程序,並提供對非圖形設備、內存管理和名稱空間管理的訪問。 |
如果Interrupts/sec大於System Calls/sec.,則系統中某一硬件設備產生過多的中斷。 |
次/sec |
Processor Queue Length |
處理器隊列的線程數量。此計數器只顯示就緒線程,而不是正在運行的線程。 |
如果處理器隊列中總是有兩個以上的線程通常表示處理器堵塞。 |
|
進程切換率 Context Switches/sec |
指計算機上的所有處理器全都從一個線程轉換到另一個線程的綜合速率。當正在運行的線程自動放棄處理器時出現上下文轉換,由一個有更高優先就緒的線程占先或在用戶模式和特權 (內核) 模式之間轉換以使用執行或分系統服務 |
如果此計數器的數值較大,則表明鎖定競爭很激烈,或者線程在用戶和內核模式之間頻繁切換。 |
PS:
-
Processor/% Processor Time
閥值:處理器的閥值一般設為85%。
含義:這個計數器是處理器活動的主要指標。高數值並不一定是壞事,但是如果其他處理器相關的計數器(比如% Privileged Time 或者Processor Queue Length)線性增加的話,高CPU使用率就值得調查了。 -
Processor/% Privileged Time
閥值:如果數值持續大於75%就表示存在瓶頸。
含義:這個計數器表示一個線程在特權模式下所使用的時間比例。當你的程序調用操作系統的方法(比如文件操作,網絡I/O或者分配內存),這些操作系統的方法是在特權模式下運行的。 -
Processor/% Interrupt Time
閥值:取決於處理器
含義:這個計數器表示處理器接收處理硬件中斷所使用的時間比例。這個值間接指出產生中斷的硬件設備活動,比如網絡變化。這個計數器顯著增加的話表示硬件可能存在問題。 -
System/Processor Queue Length
閥值:平均值持續大於2那么表示CPU存在瓶頸
含義:如果就緒的任務超過處理能力線程就會被放進隊列。處理器隊列是就緒但是未能被處理器執行的線程的集合,這是因為另外一個線程正在執行狀態。持續或者反復發生2個以上的隊列則明確的表示存在處理器瓶頸。你也能通過減少並發取得更大的吞吐量。
你可以結合Processor/% Processor Time來決定增加CPU的話你的程序是否能夠受益。即使在多處理器的電腦上,對於CPU時間也是單隊列。因此,在多處理器電腦上,Processor Queue Length (PQL)的值除以用來處理負載的CPU個數。
如果CPU非常忙(90%以上的使用率),PQL的平均值也持續大於2/CPU,這是應該存在CPU瓶頸而且能夠從更多的CPU中受益。或者,你可以減少線程的數量以及增加應用程序層的隊列。這會引起少量的Context Switching,但是少許的Context Switching對於減少CPU負載是有好處的。PQL大於2但是CPU使用率卻不高的的常見原因是對CPU時間的請求隨機到達而且線程卻從處理器申請到不對稱的CPU時間。這意味着處理器並不是瓶頸,而你的線程邏輯是需要改進的。 - System/Context Switches/sec
閥值:按照通常的規律,context switching速率小於5000/秒/CPU是不需要擔心的。如果Context Switching速率達到15000/秒/CPU的話就是一個制約因素了。
含義:當一個高優先級的線程取代一個正在運行的低優先級線程,或者高優先級線程阻塞的時候就會發生Context Switching。大量的Context Switching可以發生在許多線程擁有相同的優先級的情況下,這通常表示有太多的線程競爭CPU,如果你沒有看到太高的處理器使用率而且發現Context Switch非常低,那么表示線程被阻塞。
內存
- Windows -Memory
指標名稱 |
指標描述 |
指標范圍 |
指標單位 |
Pages/sec Pages Input/sec Pages Output/sec Page Fault/sec |
Page Faults/sec 是處理器每秒鍾處理的錯誤頁(包括軟錯誤和硬錯誤)。Pages Input/sec 是為了解決硬錯誤頁,從硬盤上讀取的頁數, 而Page Reads/sec是為了解決硬錯誤,從硬盤讀取的次數。Pages/sec是Pages Input/sec 和Pages Output/sec 的總和。 該系列指標是可以顯示導致系統范圍延緩類型錯誤的主要指示器。 當處理器向內存指定的位置請求一頁(可能是數據或代碼)出現錯誤時,這就構成一個Page Fault。如果該頁在內存的其他位置,該錯誤被稱為軟錯誤( 用Transition Fault/sec衡量); 如果該頁必須從硬盤上重新讀取時, 被稱為硬錯誤。許多處理器可以在有大軟錯誤的情況下繼續操作。但是, 硬錯誤可以導致明顯的拖延。 |
如果Page Reads/Sec持續保持為5,表示可能內存不足。Page/sec推薦0-20。如果服務器沒有足夠的內存處理其工作負荷,此數值將一直很高。如果大於80,表示有問題(太多的讀寫數據操作要訪問磁盤,可考慮增加內存或優化讀寫數據的算法)。 該系列計數器的值比較低, 說明響應請求比較快, 否則可能是服務器系統內存短缺引起(也可能是緩存太大, 導致系統內存太少)。 |
次/sec |
Available Bytes |
顯示出當前空閑的物理內存總量,它等於分配給待機(緩存的)、空閑和零分頁列表內存的總和。 空閑內存可以馬上使用; 清零內存是由零值填滿的內存頁,用來防止后續進程獲得舊進程使用的數據; 待機內存是從進程工作集(其物理內存)中刪除然后進入磁盤的內存,但是該內存仍然可以收回。該指標僅顯示最后一次觀察到的值,不是平均值。 |
當這個數值變小時,Windows開始頻繁地調用磁盤頁面文件。如果這個數值很小,例如小於5 MB,系統會將大部分時間消耗在操作頁面文件上。 一般要保留10%的可用內存。最低不能<4M,此值過小可能是內存不足或內存泄漏。 |
|
Committed Bytes |
是指以字節表示的確認虛擬內存,是磁盤頁面文件上保留空間的物理內存。 |
不超過物理內存的 75% |
|
硬盤參數
- Windows -Disk
指標名稱 |
指標描述 |
指標范圍 |
指標單位 |
% Disk Time |
指所選磁盤驅動器忙於為讀或寫入請求提供服務所用的時間的百分比。 |
正常值<10,此值過大表示耗費太多時間來訪問磁盤,可考慮增加內存、更換更快的硬盤、優化讀寫數據的算法。若數值持續超過80 (此時處理器及網絡連接並沒有飽和),則可能是內存泄漏。 |
|
Current Disk Queue Length |
是在收集性能數據時磁盤上當前的請求數量。它還包括在收集時處於服務的請求。這是瞬間的快照,不是時間間隔的平均值。多軸磁盤設備能有一次處於運行狀態的多重請求,但是其他同期請求正在等待服務。此計數器會反映暫時的高或低的隊列長度,但是如果磁盤驅動器被迫持續運行,它有可能一直處於高的狀態。 |
請求的延遲與此隊列的長度減去磁盤的軸數成正比。為了提高性能,此差應該平均小於二。 |
|
Avg.Disk Queue Length Avg. Disk Read Queue Length Avg. Disk Write Queue Length |
指讀取和寫入請求(為所選磁盤在實例間隔中列隊的)的平均數。 |
Avg.Disk Queue Length正常值<0.5,此值過大表示磁盤IO太慢,要更換更快的硬盤。 |
|
windows性能監視器
性能計數器(counter)是描述服務器或操作系統性能的一些數據指標。計數器在性能測試中發揮着“監控和分析”的關鍵作用,尤其是在分析系統的可擴展性、進行性能瓶頸的定位時,對計數器的取值的分析非常關鍵。但必須說明的是,單一的性能計數器只能體現系統性能的某一個方面,對性能測試結果的分析必須基於多個不同的計數器。 與性能計數器相關的另一個術語是“資源利用率”。該術語指的是系統各種資源的使用狀況。為了方便比較,一般用“資源的實際使用/總的資源可用量”形成資源利用率的數據,用以進行各種資源使用的比較。 性能測試之內存篇(windows) 要監視內存不足的狀況,請從以下的對象計數器開始: · Memory\ Available Bytes · Memory\ Pages/sec Available Bytes剩余的可用物理內存,單位是兆字節(參考值:>=10%)。表明進程當前可使用的內存字節數。Pages/sec 表明由於硬件頁面錯誤而從磁盤取出的頁面數,或由於頁面錯誤而寫入磁盤以釋放工作集空間的頁面數。 如果 Available Bytes 的值很小(4 MB 或更小),則說明計算機上總的內存可能不足,或某程序沒有釋放內存。如果 Pages/sec 的值為 20 或更大,那么您應該進一步研究頁交換活動。Pages/sec 的值很大不一定表明內存有問題,而可能是運行使用內存映射文件的程序所致。 操作系統經常會利用磁盤交換的方式提高系統可用的內存量或是提高內存的使用效率。下列四個 指標直接反映了操作系統進行磁盤交換的頻度。 當處理器在內存中讀取某一頁出現錯誤時,就會產生缺頁中斷,也就是 page Fault。如果這個頁 位於內存的其他位置,這種錯誤稱為軟錯誤,用Transition Fault/sec 來衡量;如果這個頁位於硬盤上,必須從硬盤重新讀取,這個錯誤成為硬錯誤。硬錯誤會使系統的運行效率很快將下來。Page Faults/sec這個計數器就表示每秒鍾處理的錯誤頁數,包括硬錯誤和軟錯誤。
必須同時監視 Available Bytes、Pages/sec 和 Paging File % Usage,以便確定是否發生這種情況。如果正在讀取非緩存內存映射文件,還應該查看緩存活動是否正常。 Cathe Bytes 內存泄露 · Memory\Available Bytes · Memory\ Committed Bytes 如果您懷疑有內存泄露,請監視 Memory\Available Bytes 和 Memory\ Committed Bytes,以觀察內存行為,並監視你認為可能在泄露內存的進程的 Process\ Private Bytes、Process\ Working Set 和Process\ Handle Count。如果您懷疑是內核模式進程導致了泄露,則還應該監視 Memory\ Pool Nonpaged Bytes、Memory\ Pool Nonpaged Allocs 和 Process(process_name)\ Pool Nonpaged Bytes。 private Bytes 檢查過於頻繁的頁交換 由於過多的頁交換要使用大量的硬盤空間,因此有可能將導致將頁交換內存不足,這容易與導致頁交換的磁盤瓶頸混淆。因此,在研究內存不足不太明顯的頁交換的原因時,您必須跟蹤如下的磁盤使用情況計數器和內存計數器: · Physical Disk\ % Disk Time · Physical Disk\ Avg.Disk Queue Length 例如,包括 Page Reads/sec 和 % Disk Time 及 Avg.Disk Queue Length。如果頁面讀取操作速率很低,同時 % Disk Time 和 Avg.Disk Queue Length的值很高,則可能有磁盤瓶徑。但是,如果隊列長度增加的同時頁面讀取速率並未降低,則內存不足。 要確定過多的頁交換對磁盤活動的影響,請將 Physical Disk\ Avg.Disk sec/Transfer 和 Memory\ Pages/sec 計數器的值增大數倍。如果這些計數器的計數結果超過了 0.1,那么頁交換將花費百分之十以上的磁盤訪問時間。如果長時間發生這種情況,那么您可能需要更多的內存。 研究程序的活動 接下來,檢查正在運行的程序導致的過多的頁交換。如果可能,請停止具有最高工作集值的程序,然后查看頁交換速率是否有顯著變化。如果您懷疑存在過多的頁交換,請檢查 Memory\ Pages/sec 計數器。該計數器顯示由於頁面不在物理內存中而需要從磁盤讀取的頁面數。(注意該計數器與 Page Faults/sec 的區別,后者只表明數據不能在內存的指定工作集中立即使用。) 性能測試之處理器篇(windows) 監視“處理器”和“系統”對象計數器可以提供關於處理器使用的有價值的信息,幫助您決定是否存在瓶頸。需要包含下列內容:
該計數值用於體現服務器整體的處理器利用率,對多處理器的系統而言,該計數值體現的是所有CPU的平均利用率。如果該值的數值持續超過90%,則說明整個系統面臨着處理器方面的瓶頸,需要通過增加處理器來提高性能。 要注意的是,由於操作系統本身的特性,在某些多CPU系統中,該數據本身並不大,但此時CPU之間的負載狀況極不均衡,此時也應該視作系統產生了處理器方面的瓶頸。
Processor\ % User Time是指系統的非核心操作消耗的CPU時間,如果該值較大,可以考慮是否通過優化算法等方法降低這個值。如果該服務器是數據庫服務器,Processor\ % User Time大的原因很可能是數據庫的排序或是函數操作消耗了過多的CPU時間,此時可以考慮對數據庫系統進行優化。
%Total Processor Time %Processor Time 觀察處理器使用情況的值 要測量處理器的活動,請查看 Processor\ % Processor Time 計數器。該計數器顯示處理器忙於執行非空閑線程所耗時間的百分比。 檢查處理器使用時,請考慮計算機的角色和所完成工作的類型。根據計算機進行的工作,較高的處理器值意味着系統正有效地處理較重的工作負載或正在努力維持。例如,如果正在監視用戶的計算機,並且該計算機用於計算,計算程序可能容易使用 100% 的處理器時間。即使這會造成該計算機中其他應用程序的性能受到影響,但可以通過改變負載來解決。 另一方面,在處理許多客戶請求的服務器計算機中,100% 左右的值表示這些過程在隊列中,正在等待處理器時間,並且造成瓶頸。如此持續高層次的處理器使用對服務器而言是無法接受的。 考察處理器瓶頸 進程的線程所需要的處理器周期超出可用周期時,處理器瓶頸將逐步顯示出來。可以建立較長的處理器隊列,並且系統響應會受到影響。處理器瓶頸兩種常見的原因是 CPU 限制程序和產生過多中斷的驅動程序或子系統組件。 要決定是否由於對處理器時間的要求較高而存在處理器瓶頸,請查看 System\ Processor Queue Length 計數器。隊列中包含兩個或更多的項目則表明存在瓶頸。如果多個程序進程競爭大多數處理器時間,安裝更快速的處理器會提高吞吐量。如果正在運行多線程的進程,附加處理器會有所幫助,但是請注意,附加處理器可能只有有限的益處。 此外,跟蹤計算機的服務器工作隊列當前長度的 Server Work Queues\ Queue Length 計數器會顯示出處理器瓶頸。隊列長度持續大於 4 則表示可能出現處理器擁塞。此計數器是特定時間的值,而不是一段時間的平均值。 要決定中斷活動是否造成瓶頸,請觀察 Processor\ Interrupts/sec 計數器的值,該計數器測量來自輸入/輸出 (I/O) 設備的服務請求的速度。如果此計數器的值明顯增加,而系統活動沒有相應增加,則表明存在硬件問題。 也可以對生成中斷的磁盤驅動器、網卡和其他設備活動的間接指示器監視 Processor\ % Interrupt Time 時間。 注意 要檢測可能影響處理器性能的硬件問題,例如 IRQ 沖突,請觀察 System\ File Control Bytes/second 的值。 監視多處理器系統 要觀察多處理器計算機的效率,請使用下列附加計數器。
性能測試之磁盤篇(windows) 監測對象:PhysicalDisk 每磁盤的I/O數可用來與磁盤的I/O能力進行對比,如果經過計算得到的每磁盤I/O數超過了磁盤標稱的I/O能力,則說明確實存在磁盤的性能瓶頸。 下表給出了每磁盤I/O的計算公式:
Disk Bytes/sec 提供磁盤系統的吞吐率。 計數器反映磁盤完成請求所用的時間。較高的值表明磁盤控制器由於失敗而不斷重試該磁盤。這些故障會增加平均磁盤傳送時間。一般來說,定義該值小於15ms最為優異,介於15-30ms之間為良好,30-60ms之間為可以接受,超過60ms則需要考慮更換硬盤或硬盤的RAID方式了
Average Disk Bytes/Transfer 值大於 20 KB 表示該磁盤驅動器通常運行良好;如果應用程序正在訪問磁盤,則會產生較低的值。例如,隨機訪問磁盤的應用程序會增加平均 Disk sec/Transfer 時間,因為隨機傳送需要增加搜索時間。 性能測試之網絡篇(windows) 監測對象:Network Interface Network Interface\Bytes Total/sec為發送和接收字節的速率(包括幀字符在內)。可以通過該計數器的值判斷網絡連接速度是否是瓶頸,具體操作方法是用該計數器的值與目前的網絡帶寬進行比較。
Byte Total/sec
性能測試之進程篇(windows) 查看進程的%Processor Time值 每個進程的%Processor Time反映進程所消耗的處理器時間。用不同進程所消耗的處理器時間進行對比,可以很容易的看出具體是哪個進程在性能測試過程中消耗了最多的處理器時間,從而可以據此針對應用進行優化。 查看每個進程產生的頁面失效 可以用每個進程產生的頁面失效(通過Process\Page Failures/sec計數器獲得)和系統的頁面失效(可通過Memory\Page Failures/sec計數器獲得)的比值,來判斷哪個進程產生了最多的失效頁面,這個進程要么是需要大量內存的進程,要么是非常活躍的進程,可以對其進行中的分析。 了解進程的Process\Private Bytes Process\Private Bytes是指進程所分配的無法與其他進程共享的當前字節數量。該計數器主要用拉判斷進程在性能測試過程中有無內存泄漏。 例如:對於一個IIS之上的web應用,我們可以重點監控inetinfo進程的Private Bytes,如果在性能測試過程中,該進程的Private Bytes計數器值不斷增加,或是性能測試停止后一段時間,該進程的Private Bytes仍然持續在高水平,則說明應用存在內存泄漏。 (備注:進程分析方法用到的計數器主要有:Process\%Processor Time、Page Failures/sec、Page Failures/sec、Private Bytes)
相關鏈接: ① 內存映射文件機制 內存映射文件是利用虛擬內存把文件映射到進程的地址空間中去,在此之后進程操作文件,就像操作進程空間里的地址一樣了,省去了讀和寫I/O的時間。 比如使用memcpy等內存操作的函數。這種方法能夠很好的應用在需要頻繁處理一個文件或者是一個大文件的場合,這種方式處理IO效率比普通IO效率要高。 利用內存映射文件您可以認為操作系統已經為您把文件全部裝入了內存,然后您只要移動文件指針進行讀寫即可了。這樣您甚至不需要調用那些分配、釋放內存塊和文件輸入/輸出的API函數,另外您可以把這用作不同的進程之間共享數據的一種辦法。運用內存映射文件實際上沒有涉及實際的文件操作,它更象為每個進程保留一個看得見的內存空間。至於把內存映射文件當成進程間共享數據的辦法來用,則要加倍小心,因為您不得不處理數據的同步問題,否則您的應用程序也許很可能得到過時或錯誤的數據甚至崩潰。 內存映射文件本身還是有一些局限性的,譬如一旦您生成了一個內存映射文件,那么您在那個會話期間是不能夠改變它的大小的。所以內存映射文件對於只讀文件和不會影響其大小的文件操作是非常有用的。當然這並不意味着對於會引起改變其大小的文件操作就一定不能用內存影射文件的方法,您可以事先估計操作后的文件的可能大小,然后生成這么大小一塊的內存映射文件,然后文件的長度就可以增長到這么一個大小。我們的解釋夠多的了,接下來我們就看看實現的細節:
|
監控 for sql server
3,硬盤性能計數器
在OS Level上,Windows在一塊物理硬盤上分成多個邏輯分區,每一個邏輯分區叫做一個Logical Disk,通過盤符標識,運行在Windows上的Application使用盤符來尋址。對於分配在同一塊物理硬盤上的邏輯分區,共享物理硬盤的讀寫帶寬,相當於在一塊物理硬盤上工作。因此,Disk計數器分為兩組:PhysicalDisk 和 LogicalDisk,LogcialDisk計數器記錄每個邏輯分區的讀寫計數,用於分析特定的Application在不同的邏輯分區上的Disk IO活動和性能參數;PhysicalDisk計數器記錄整個物理Disk的性能指標,用於了解Disk的響應速度,主要使用PhysicalDisk計數器,分析Disk的性能問題。
系統級經常用到的Disk性能計數器是PhysicalDisk計數器,LogcialDisk僅供參考:
- %Disk Time :表示Disk的忙碌程度,是Disk處理讀寫請求的時間的百分比,經常大於100%,建議使用%IdleTime反推出Disk處於讀寫狀態的百分比
- Disk Reads/sec :每秒向Disk請求讀操作的次數
- Disk Transfers/sec:Disk每秒執行讀寫操作的次數
- Disk Reads Bytes/sec :在Disk執行讀操作時,每秒從Disk讀取的字節數量
- Disk Bytes/sec:當Disk執行讀寫操作時,每秒從Disk讀取到內存的,或從內存寫入到Disk的字節數量,好的Disk,其值在20-40MB之間,差的Disk,其值在20MB以下。
- Avg. Disk Queue Length :提供Disk阻塞程度的主要度量值,表示在 sample interval期間,Disk等待處理的IO請求隊列的平均長度,即等待被Disk處理的IO請求的數量,隊列的長度要考慮到RAID,如果存儲后台使用100塊物理disk,那么該計數值達到100,這個值是正常的,理論上,每塊物理disk的隊列長度不應該長時間大於2.
- Avg. Disk sec/Transfer:Disk每一次讀寫操作所用的平均時間
- Avg. Disk sec/Read:Disk每一次讀操作所用的平均時間
- Avg. Disk sec/Write:Disk每一次寫操作所用的平均時間
avg.Disk sec/(Transfer,Read,Write),能夠很好的反映Disk的IO速度,所以這三個計數值經常用來衡量Disk的IO速度:
- 很好:<10ms
- 一般:10-20ms
- 有點慢:20-50ms
- 非常慢:>50ms
二,系統物理內存性能計數器
SQL Server在運行的過程中,會持續地向內存中加載大量數據,如果數據長期駐留在內存中,那么SQL Server 不需要申請Disk IO請求,就能直接訪問數據,快速響應用戶的請求。如果SQL Server訪問的數據不在內存中,將會產生一個Hard Page Fault,那么SQL Server首先指示存儲引擎將數據頁從Disk加載到內存中,產生PageIOLatch等待,等到數據被加載到內存之后,SQL Server在內存中訪問數據,處理用戶請求,由於Disk 的IO速度較慢,延遲高,大量的Hard Page Fault將嚴重影響SQL Server響應用戶請求的速度,因此,常用的系統級內存計數器跟缺頁中斷有關:
- Memory:Page Faults/sec :每秒發生的Page Fault的數量,Page Fault包括Hard Fault 和 Soft Fault,Hard fault表示需要從Disk中讀取數據頁,Soft fault表示需要從Physical Memory中讀取數據頁,Soft Fault不會影響性能,由於Hard Fault需要訪問Disk,會產生顯著的延遲。
- Memory:Pages Input/sec:每秒發生的Hard Fault的數量,用於計算Hard Fault的百分比: Pages Input / Page Faults = % Hard Page Faults,如果百分比經常大於40%,說明系統需要經常訪問Disk獲取數據,在一定程度上說明系統存在內存壓力。
- Memory:Pages/sec:每秒從Disk讀取或寫入Disk的Page數量,表示內存和Disk交互的Page的數量:將Page存儲到Disk或從Disk讀取數據到內存的Page的數量。
三,SQL Server的Buffer Manager計數器
Buffer Manager計數器用於監視SQL Server如何使用內存數據頁和計划緩存,讀取和寫入數據頁時的Disk IO。由於Buffer Pool是SQL Server內存最活躍,使用最多的部分,所以也是最容易出現性能瓶頸的部分,計數值尤其重要:
- Buffer Cache hit ration:從Buffer Pool中直接讀取,不需要從Disk中讀取的數據頁的百分比,也叫命中率,這個計數器表示,在SQL Server讀取數據時,數據存在於內存中,跟數據駐留在內存中的時間和內存壓力關系不大,僅供參考。
- Page Writes/sec:每秒寫入到Disk的數據頁數,和內存使用關系不大,跟用戶修改的數據量有關
- CheckPoint Pages/sec:將數據刷新到Disk的Dirty Pages的數量,和內存使用關系不大,跟用戶修改的數據量有關,如果用戶對數據庫做了很多修改操作,那么內存中修改過的數據臟頁就會比較多,每次刷新的臟頁數量就會比較大
- Lazy Writes/sec:被LazyWriter刷新的buffer數量,如果是臟頁,那么將buffer寫入到Disk,並將buffer空間標記為Free,如果不是臟頁,那么該buffer空間也被標記為Free,LazyWriter的作用是維護一定數量的Free buffer,SQL Server使用Free buffer來加載新的數據頁。
- Page Life Expectancy:PLE,數據頁駐留在內存中的時間。如果SQL Server沒有新的內存需求,或有空閑的內存來完成新的內存需求,那么Lazy Writer不會被處罰,Page會一直駐留在Buffer Pool中,那么Page Life Expectancy會維持在一個比較高的水平;如果Page Life總是高高低低,表明SQL Server存在內存壓力。PLE的參考數值是:Max Server Memory/4GB*300s,如果PLE值長期低於參考值,內存可能存在瓶頸。
- Page Reads/sec:每秒從Disk讀取的數據頁數,即物理讀的次數,如果用戶訪問的數據都緩存在內存中,那么SQL Server不需要從物理Disk上讀取頁面。由於物理IO的開銷大,Page Reads操作一定會影響SQL Server的性能。
- Free list stalls/sec:等待一個Free Page的請求數量,SQL Server申請從Disk加載一個Page到內存中,必須在內存中分配一個Buffer,Buffer Manager負責維護Free Buffer List,如果Free List沒有任何Free Buffer,那么請求必須等待,直到有空閑的Buffer使用,才能將Disk中的Page加載到內存中。
經常使用后四種計數器,探測系統的內存壓力,前三種,僅供參考,在此,感謝 wy123 的幫助。
四,SQL Server的Memory Manager計數器
Memory Manager計數器用於監控服務器內存總體使用情況,在一個非常繁忙的系統中,Lock內存和授予內存是常用的計數器:
- Total Server Memory (KB):SQL Server當前使用的內存總量
- Target Server Memory (KB):SQL Server能夠使用的內存總量
- Lock Memory (KB):SQL Server用於鎖的內存總量
- Grant Workspace Memory (KB):授予內存,SQL Server用於執行hash,排序和創建Index操作而消耗的內存總量
- Memory Grants Pending (KB):等待內存授予的進程數量,如果進程不能獲得指定數量的內存,那么進程將不會開始執行
五,使用Performance Counter監控SQL Server數據庫系統的整體性能
創建兩個Data Set:Disk Activity,用於監控物理磁盤的活動;Memory Activity ,用於監控系統內存的Hard Fault和SQL Server的內存使用。