使用性能監視器找出SQLServer硬件瓶頸
開始SQLServer性能調優的最佳地方就是從性能監視器(系統監視器)開始。通過一個24小時的周期對一些關鍵的計數器進行監控,你將對你SQLServer服務器的硬件瓶頸了如指掌。
一般來說,使用性能監視器去創建一個一些關鍵的計數器的24小時周期的監控日志。當你決定創建這個日志的時候,你需要選擇一個典型的24小時的周期,例如,選擇一個典型的比較忙的日期,而不是周日或節假日。
一旦你將這些捕獲的數據形成日志后,在性能監視器的圖形界面下會顯示計數器的推薦值。你在上表中記下均值、最小值、峰值。做完這些后,用你的結果跟下面的分析比較。通過你的結果和下面的建議值進行比較,你將能快速的找到你的SQLServe正在經歷的潛在的硬件瓶頸。
關鍵性能計數器說明
下面是不同關鍵性能計數器的一個討論,它們的建議值和為了幫助解決硬件瓶頸問題的一些選項。注意我已經限制了性能監視器需要監視的一些關鍵計數器。我這么做是因為在本文我們的目的是為了容易的找到顯而易見的性能問題,許多其他的性能監視器計數器你能在本網站其他地方找到。
Memory: Pages/sec
這個計數器記錄的是每秒鐘內存和磁盤之間交換的頁面數。交換更多的頁面、超過你服務器承受的更多的I/O,將輪流降低你SQLserver的性能。你的目的就是盡量將頁面減少到最小,而不是消除它。
如果你的服務器上SQLServer是最主要的應用程序,那么這個值的理想范圍是0~20之間。可能很多時候你看到的值都會超過20。這個值一般要保持在每秒的平均頁數在20以下。
如果這個值平均總是超過20,其中最大的一個可能是內存瓶頸問題,需要增加內存。通常來說,更多的內存意味著需要執行的頁面更少。
在大多數情況下,服務器決定SQLServer使用的適當內存的大小,頁面將平均小于20。給SQLServer適當的內存意味著服務器的緩存命中率(Buffer Hit Cache Ratio 這個稍后會講到)達到99%或者更高。如果在一個24小時的周期里你的sqlserver的緩存命中率達到99%或者更高,但是在這個期間你的頁面數總是超過20,這意味著你或許運行了其他的程序。如果是這樣的情況,建議你移除這些程序,使SQLServer是你的服務器的最主要的程序。
如果你的sqlserver服務器沒有運行其他程序,并且在一個24小時的周期里頁面數總是超過20,這說明你應該修改你對SQLServer的內存設置了。將其設置為“動態配置SQLServer的內存”,并且最大內存設置得高一些。為了達到最優,SQLServer將盡可能的獲得多的內存以完成自己的工作,而不是去和其他的程序爭奪內存。
Memory: Available Bytes
另一個檢查SQLServer是否有足夠的物理內存的方法是檢查Memory Object: Available Bytes計數器。 這個值至少大于5M,否則需要添加更多的物理內存。在一個專門的SQLServer服務器上,SQLServer試圖維持4-10M的自由物理內存,其余的物理內存被操作系統和SQLServer使用。當可用的物理內存接近5M或者更低時,SQLServer最可能因為缺少內存而遇到性能瓶頸。遇此情況,你需要增加物理內存以減少服務器的負荷,或者給SQLServer配置一個合適的內存。
Physical Disk: % Disk Time
這個計數器度量磁盤陣列繁忙程度(不是邏輯分區或磁盤陣列上獨立的磁盤)。它提供一個對磁盤陣列繁忙程度相對較好的度量。原則上計數器% Disk Time的值應該小于55%。如果持續超過55%(在你24小時的監控周期里大約超過10分鐘),說明你的SQLServer有I/O瓶頸。如果你只是偶爾看到,也不必太擔心。但是,如果經常發生的話(也就是說,一個小時出現好幾次),就應該著手尋找增加服務器I/O性能或者減少服務器負荷的解決之道了。一般是為磁盤陣列增加磁盤,或者更好更快的磁盤,或者給控制器卡增加緩存,或者使用不同版本的RAID,或者更換更快的控制器。
在NT4.0上使用該計數器之前,確認在NT命令提示符下輸入diskperf -y,重啟服務器,以便手動打開。在NT4.0下第一次必須將該計數器打開,Windows2000默認是打開的。
Physical Disk: Avg. Disk Queue Length
除了觀察物理磁盤的% Disk Time計數器外,還可以用Avg. Disk Queue Length計數器。磁盤陣列中的各個磁盤的該值如果超過2(在你24小時的監控周期里大約超過10分鐘),那么你的磁盤陣列存在I/O瓶頸問題。象計數器% Disk Time一樣,如果只是偶爾看到,也不必太擔心。但是,如果經常發生的話,就應該著手尋找增加服務器I/O性能的解決之道了。如前所述。
你需要計算這個值,因為性能監視器不知道你的磁盤陣列中有多少物理磁盤。例如,如果你有一個6個物理磁盤組成的磁盤陣列,它的Avg.
Disk Queue Length值為10,那么實際每個磁盤的值為1.66(10/6=1.66),它們都在建議值2以內。
在NT4.0上使用該計數器之前,確認在NT命令提示符下輸入diskperf -y,重啟服務器,以便手動打開。在NT4.0下第一次必須將該計數器打開,Windows2000默認是打開的。
一起使用這兩個計數器將幫助你找出I/O瓶頸。例如,如果% Disk Time的值超過55%,Avg. Disk Queue Length計數器值超過2,服務器則存在I/O瓶頸。
Processor: % Processor Time
處理器對象: % Processor Time計數器對每一個CPU可用,并針對每一個CPU進行檢測。同樣對于所有的CPU也可用。這是一個觀察CPU利用率的關鍵計數器。如果% Total Processor Time計數器的值持續超過80%(在你24小時的監控周期里大約超過10分鐘),說明CPU存在瓶頸問題。如果只是偶爾發生,并且你認為對你的服務器影響不大,那沒問題。如果經常發生,你應該減少服務器的負載,更換更高頻率的CPU,或者增加CPU的數量或者增加CPU的2級緩存(L2 cache)。
System: Processor Queue Length
根據% Processor Time計數器,你可以監控Processor Queue Length計數器。每個CPU的該值如果持續超過2(在你24小時的監控周期里大約超過10分鐘),那么你的CPU存在瓶頸問題。例如,如果你的服務器有4個CPU,Processor Queue Length計數器的值總共不應超過8。
如果Processor Queue Length計數器的值有規律的超過建議的最大值,但是CPU利用率相對不是很高,那么考慮減少SQLServer的"max worker threads"的配置值。Processor Queue Length計數器的值高的可能原因是有太多的工作線程等待處理。通過減少"maximum worker threads"的值,強迫線程池踢掉某些線程,從而使線程池得到最大的利用。
一起使用計數器Processor Queue Length和計數器% Total Process Time,你可以找到CPU瓶頸,如果都顯示超過它們的建議值,可以確信存在CPU瓶頸問題。
SQL Server Buffer: Buffer Cache Hit Ratio
SQL Server Buffer中的計數器Buffer Cache Hit Ratio用來指出SQLServer從緩存中而不是磁盤中獲得數據的頻率。在一個OLTP程序中,該比率應該超過90%,理想值是超過99%。如果你的buffer cache hit ratio低于90%,你需要立即增加內存。如果該比率在90%和99%之間,你應該認真考慮購買更多的內存了。如果接近99%,你的SQLServer性能是比較快的了。某些情況下,如果你的數據庫非常大,你不可能達到99%,即使你在服務器上配置了最大的內存。你所能做的就是盡可能的添加內存。
在OLAP程序中,由于其本身的工作原理,該比率大大減少。不管怎樣,更多的內存總是能提高SQLServer的性能。
SQL Server General: User Connections
既然sqlserver的使用人數會影響它的性能,你就需要專注于sqlserver的General Statistics Object: User Connections計數器。它顯示sqlserver目前連接的數量,而不是用戶數。
如果該計數器超過255,那么你需要將sqlserver的"Maximum Worker Threads" 的配置值設置得比缺省值255高。如果連接的數量超過可用的線程數,那么sqlserver將共享線程,這樣會影響性能。"Maximum Worker Threads"需要設置得比你服務器曾經達到的最大連接數更高。
開始SQLServer性能調優的最佳地方就是從性能監視器(系統監視器)開始。通過一個24小時的周期對一些關鍵的計數器進行監控,你將對你SQLServer服務器的硬件瓶頸了如指掌。
一般來說,使用性能監視器去創建一個一些關鍵的計數器的24小時周期的監控日志。當你決定創建這個日志的時候,你需要選擇一個典型的24小時的周期,例如,選擇一個典型的比較忙的日期,而不是周日或節假日。
一旦你將這些捕獲的數據形成日志后,在性能監視器的圖形界面下會顯示計數器的推薦值。你在上表中記下均值、最小值、峰值。做完這些后,用你的結果跟下面的分析比較。通過你的結果和下面的建議值進行比較,你將能快速的找到你的SQLServe正在經歷的潛在的硬件瓶頸。
關鍵性能計數器說明
下面是不同關鍵性能計數器的一個討論,它們的建議值和為了幫助解決硬件瓶頸問題的一些選項。注意我已經限制了性能監視器需要監視的一些關鍵計數器。我這么做是因為在本文我們的目的是為了容易的找到顯而易見的性能問題,許多其他的性能監視器計數器你能在本網站其他地方找到。
Memory: Pages/sec
這個計數器記錄的是每秒鐘內存和磁盤之間交換的頁面數。交換更多的頁面、超過你服務器承受的更多的I/O,將輪流降低你SQLserver的性能。你的目的就是盡量將頁面減少到最小,而不是消除它。
如果你的服務器上SQLServer是最主要的應用程序,那么這個值的理想范圍是0~20之間。可能很多時候你看到的值都會超過20。這個值一般要保持在每秒的平均頁數在20以下。
如果這個值平均總是超過20,其中最大的一個可能是內存瓶頸問題,需要增加內存。通常來說,更多的內存意味著需要執行的頁面更少。
在大多數情況下,服務器決定SQLServer使用的適當內存的大小,頁面將平均小于20。給SQLServer適當的內存意味著服務器的緩存命中率(Buffer Hit Cache Ratio 這個稍后會講到)達到99%或者更高。如果在一個24小時的周期里你的sqlserver的緩存命中率達到99%或者更高,但是在這個期間你的頁面數總是超過20,這意味著你或許運行了其他的程序。如果是這樣的情況,建議你移除這些程序,使SQLServer是你的服務器的最主要的程序。
如果你的sqlserver服務器沒有運行其他程序,并且在一個24小時的周期里頁面數總是超過20,這說明你應該修改你對SQLServer的內存設置了。將其設置為“動態配置SQLServer的內存”,并且最大內存設置得高一些。為了達到最優,SQLServer將盡可能的獲得多的內存以完成自己的工作,而不是去和其他的程序爭奪內存。
Memory: Available Bytes
另一個檢查SQLServer是否有足夠的物理內存的方法是檢查Memory Object: Available Bytes計數器。 這個值至少大于5M,否則需要添加更多的物理內存。在一個專門的SQLServer服務器上,SQLServer試圖維持4-10M的自由物理內存,其余的物理內存被操作系統和SQLServer使用。當可用的物理內存接近5M或者更低時,SQLServer最可能因為缺少內存而遇到性能瓶頸。遇此情況,你需要增加物理內存以減少服務器的負荷,或者給SQLServer配置一個合適的內存。
Physical Disk: % Disk Time
這個計數器度量磁盤陣列繁忙程度(不是邏輯分區或磁盤陣列上獨立的磁盤)。它提供一個對磁盤陣列繁忙程度相對較好的度量。原則上計數器% Disk Time的值應該小于55%。如果持續超過55%(在你24小時的監控周期里大約超過10分鐘),說明你的SQLServer有I/O瓶頸。如果你只是偶爾看到,也不必太擔心。但是,如果經常發生的話(也就是說,一個小時出現好幾次),就應該著手尋找增加服務器I/O性能或者減少服務器負荷的解決之道了。一般是為磁盤陣列增加磁盤,或者更好更快的磁盤,或者給控制器卡增加緩存,或者使用不同版本的RAID,或者更換更快的控制器。
在NT4.0上使用該計數器之前,確認在NT命令提示符下輸入diskperf -y,重啟服務器,以便手動打開。在NT4.0下第一次必須將該計數器打開,Windows2000默認是打開的。
Physical Disk: Avg. Disk Queue Length
除了觀察物理磁盤的% Disk Time計數器外,還可以用Avg. Disk Queue Length計數器。磁盤陣列中的各個磁盤的該值如果超過2(在你24小時的監控周期里大約超過10分鐘),那么你的磁盤陣列存在I/O瓶頸問題。象計數器% Disk Time一樣,如果只是偶爾看到,也不必太擔心。但是,如果經常發生的話,就應該著手尋找增加服務器I/O性能的解決之道了。如前所述。
你需要計算這個值,因為性能監視器不知道你的磁盤陣列中有多少物理磁盤。例如,如果你有一個6個物理磁盤組成的磁盤陣列,它的Avg.
Disk Queue Length值為10,那么實際每個磁盤的值為1.66(10/6=1.66),它們都在建議值2以內。
在NT4.0上使用該計數器之前,確認在NT命令提示符下輸入diskperf -y,重啟服務器,以便手動打開。在NT4.0下第一次必須將該計數器打開,Windows2000默認是打開的。
一起使用這兩個計數器將幫助你找出I/O瓶頸。例如,如果% Disk Time的值超過55%,Avg. Disk Queue Length計數器值超過2,服務器則存在I/O瓶頸。
Processor: % Processor Time
處理器對象: % Processor Time計數器對每一個CPU可用,并針對每一個CPU進行檢測。同樣對于所有的CPU也可用。這是一個觀察CPU利用率的關鍵計數器。如果% Total Processor Time計數器的值持續超過80%(在你24小時的監控周期里大約超過10分鐘),說明CPU存在瓶頸問題。如果只是偶爾發生,并且你認為對你的服務器影響不大,那沒問題。如果經常發生,你應該減少服務器的負載,更換更高頻率的CPU,或者增加CPU的數量或者增加CPU的2級緩存(L2 cache)。
System: Processor Queue Length
根據% Processor Time計數器,你可以監控Processor Queue Length計數器。每個CPU的該值如果持續超過2(在你24小時的監控周期里大約超過10分鐘),那么你的CPU存在瓶頸問題。例如,如果你的服務器有4個CPU,Processor Queue Length計數器的值總共不應超過8。
如果Processor Queue Length計數器的值有規律的超過建議的最大值,但是CPU利用率相對不是很高,那么考慮減少SQLServer的"max worker threads"的配置值。Processor Queue Length計數器的值高的可能原因是有太多的工作線程等待處理。通過減少"maximum worker threads"的值,強迫線程池踢掉某些線程,從而使線程池得到最大的利用。
一起使用計數器Processor Queue Length和計數器% Total Process Time,你可以找到CPU瓶頸,如果都顯示超過它們的建議值,可以確信存在CPU瓶頸問題。
SQL Server Buffer: Buffer Cache Hit Ratio
SQL Server Buffer中的計數器Buffer Cache Hit Ratio用來指出SQLServer從緩存中而不是磁盤中獲得數據的頻率。在一個OLTP程序中,該比率應該超過90%,理想值是超過99%。如果你的buffer cache hit ratio低于90%,你需要立即增加內存。如果該比率在90%和99%之間,你應該認真考慮購買更多的內存了。如果接近99%,你的SQLServer性能是比較快的了。某些情況下,如果你的數據庫非常大,你不可能達到99%,即使你在服務器上配置了最大的內存。你所能做的就是盡可能的添加內存。
在OLAP程序中,由于其本身的工作原理,該比率大大減少。不管怎樣,更多的內存總是能提高SQLServer的性能。
SQL Server General: User Connections
既然sqlserver的使用人數會影響它的性能,你就需要專注于sqlserver的General Statistics Object: User Connections計數器。它顯示sqlserver目前連接的數量,而不是用戶數。
如果該計數器超過255,那么你需要將sqlserver的"Maximum Worker Threads" 的配置值設置得比缺省值255高。如果連接的數量超過可用的線程數,那么sqlserver將共享線程,這樣會影響性能。"Maximum Worker Threads"需要設置得比你服務器曾經達到的最大連接數更高。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
