成為SQL服務(wù)器性能專家 不可錯(cuò)過(guò)的教程
譯文有沒(méi)有可能在短短幾秒內(nèi)回答這個(gè)問(wèn)題?也許你試圖查看性能監(jiān)視器PerfMon里面的性能計(jì)數(shù)器。里面有大約1000個(gè)名稱各異的不同計(jì)數(shù)器。你可能會(huì)問(wèn):“Skipped Ghosted Records/sec”(每秒跳過(guò)的幻影記錄數(shù))= 10,這個(gè)數(shù)值好還是壞?正確的回答是,這個(gè)數(shù)值可能并不重要。不過(guò),有些計(jì)數(shù)器確實(shí)很重要。本文將幫助你找出這類計(jì)數(shù)器,還會(huì)教你如何為最常見(jiàn)的性能問(wèn)題排除故障。
想開(kāi)始入手,先從下列網(wǎng)址安裝SQL Heartbeat工具:
http://www.sqlsolutions.com/downloads/activity-monitor/Download.html
連接到你的服務(wù)器后,你會(huì)看到服務(wù)器樹(shù)結(jié)構(gòu)中的兩個(gè)類別:
點(diǎn)擊“Online Activity/SQL Heartbeat”節(jié)點(diǎn),你會(huì)立即看到五個(gè)不同的圖表。但是最好點(diǎn)擊“Historical Data”(歷史數(shù)據(jù)),等待一兩天,等到累積了更準(zhǔn)確的衡量指標(biāo)為止。之后,你該查看圖表上的哪些內(nèi)容呢?首先,你應(yīng)該關(guān)注一下Waits圖表:
順便說(shuō)一下,你有沒(méi)有注意到這張圖上的周期性模式?比如說(shuō),周末期間活動(dòng)比較少,到了晚上活動(dòng)增加。為了更全面地了解數(shù)據(jù)庫(kù)在正常工作時(shí)間段的運(yùn)行狀況,你在分析時(shí)可以將這些時(shí)段排除在外(特別是由于這些時(shí)段可能是進(jìn)行完全備份的時(shí)候)。我們可以排除這類數(shù)據(jù),讓我們的圖表更流暢:
下一步是查看哪個(gè)類別最糟糕。如果主色是藍(lán)色或黃色(代表讀取或?qū)懭耄?,那么你的服?wù)器是磁盤輸入/輸出密集型的。下面是個(gè)示例:
為什么是輸入/輸出密集型的?點(diǎn)擊Physical R/W圖表。問(wèn)題可能出在工作負(fù)載上,比如說(shuō)輸入/輸出操作次數(shù)太多:
非常頻繁的輸入/輸出活動(dòng)可能是糟糕的高速緩存命中率引起的。你可以點(diǎn)擊Cache Hits(高速緩存命中)按鈕來(lái)證實(shí):
注意:不要使用性能監(jiān)視器PerfMon所報(bào)告的“Cache Hits Ratio”(高速緩存命中率)。PerfMon報(bào)告的只是“醫(yī)院里的平均溫度”而已——它是對(duì)周末和繁忙時(shí)段、夜間索引碎片整理和白天操作求平均值,用的是不同的使用模式。
有時(shí)候,“高速緩存命中率”足夠好,但是延遲很差。點(diǎn)擊Seek Time(尋道時(shí)間)按鈕來(lái)證實(shí):
50毫秒(ms)意味著,服務(wù)器每秒只能執(zhí)行20次輸入/輸出操作。這樣的速度僅僅相當(dāng)于老式軟盤!
有些服務(wù)器是處理器密集型的,下面是一臺(tái)典型的處理器密集型服務(wù)器的模樣:
一般來(lái)說(shuō),如果服務(wù)器是處理器密集型的,情況并不壞,只要絕對(duì)數(shù)值不是很高(千萬(wàn)要牢記:Y軸表示服務(wù)器每秒使用所有處理器時(shí)的處理器毫秒,所以在4個(gè)處理器上,每秒使用處理器最多可以有4000毫秒。)但是如果處理使用率的絕對(duì)值很高,那么點(diǎn)擊Query Stats(查詢統(tǒng)計(jì)數(shù)字)按鈕。你會(huì)看到按處理器、讀取和寫入分類的前十大有問(wèn)題的查詢。這些查詢很可能是需要優(yōu)化的對(duì)象。
順便說(shuō)一下,你每天可以通過(guò)電子郵件來(lái)獲得所有這些報(bào)告。只要在SQL Heartbeat中進(jìn)行配置:點(diǎn)擊工具欄中的Reports(報(bào)告)按鈕。
#p# 現(xiàn)在,其實(shí)只剩下了一個(gè)次要的方面。你有沒(méi)有看到上面的紅色尖峰?這些是鎖。各種各樣的鎖都很危險(xiǎn)。每天一小時(shí)的處理器使用時(shí)間沒(méi)什么問(wèn)題,但是1分鐘的鎖定時(shí)間會(huì)導(dǎo)致超時(shí)、客戶不高興。死鎖更為嚴(yán)重。
為了給鎖和死鎖排除故障,請(qǐng)從下列網(wǎng)址安裝SQL Deadlock Detector:
http://www.sqlsolutions.com/downloads/sql-deadlock-detector/Download.html
連接到同一臺(tái)服務(wù)器,在數(shù)據(jù)收集了幾小時(shí)后查看事件列表。
有時(shí)候,鎖包括幾十個(gè)進(jìn)程。從SQL Deadlock Detector里面,你能獲得關(guān)于參與鎖的進(jìn)程的所有細(xì)節(jié):
提供的信息包括鎖定表的名稱、具體的T-SQL語(yǔ)句以及父存儲(chǔ)過(guò)程。
小結(jié)
你可以迅速確定自己的SQL服務(wù)器其運(yùn)行狀況是否良好。實(shí)際上,說(shuō)到處理最常見(jiàn)的性能問(wèn)題,你只要遵照上述步驟,就能夠成為SQL服務(wù)器性能方面的專家。
原文鏈接:http://www.sqlsolutions.com/articles/articles/Become_SQL_performance_Expert_in_few_simple_steps.htm