天天看點

sql伺服器性能,SQL Server性能瓶頸,是硬體問題嗎

--王成輝翻譯整理,轉貼請注明出自微軟BI開拓者www.windbi.com

--原帖位址

使用性能螢幕找出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"需要設定得比你伺服器曾經達到的最大連接配接數更高。