(轉)SQLServer_十步優化SQL Server中的數據訪問四

            原文地址:http://tech.it168.com/a2009/1125/814/000000814758_all.shtmlhtml

第八步:使用SQL事件探查器和性能監控工具備效地診斷性能問題

  在SQL Server應用領域SQL事件探查器多是最著名的性能故障排除工具,大多數狀況下,當獲得一個性能問題報告後,通常首先啓動它進行診斷。數據庫

  你可能已經知道,SQL事件探查器是一個跟蹤和監控SQL Server實例的圖形化工具,主要用於分析和衡量在數據庫服務器上執行的TSQL性能,你能夠捕捉服務器實例上的每一個事件,將其保存到文件或表中供之後分析。例如,若是生產數據庫速度很慢,你可使用SQL事件探查器查看哪些存儲過程執行時耗時過多。瀏覽器

  SQL事件探查器的基本用法緩存

  你可能已經知道如何使用它,那麼你能夠跳過這一小節,但我仍是要重複一下,也許有許多新手閱讀本文。服務器

  1)啓動SQL事件探查器,鏈接到目標數據庫實例,建立一個新跟蹤,指定一個跟蹤模板(跟蹤模板預置了一些事件和用於跟蹤的列),如圖1所示;網絡

  圖 1 選擇跟蹤模板併發

  2)做爲可選的一步,你還能夠選擇特定事件和列工具

  圖 2 選擇跟蹤過程要捕捉的事件性能

  3)另外你還能夠點擊「組織列」按鈕,在彈出的窗口中指定列的顯示順序,點擊「列過濾器」按鈕,在彈出的窗口中設置過濾器,例如,經過設置數據庫的名稱(在like文本框中),只跟蹤特定的數據庫,若是不設置過濾器,SQL事件探查器會捕捉全部的事件,跟蹤的信息會很是多,要找出有用的關鍵信息就如大海撈針。測試

  圖 3 過濾器設置

  4)運行事件探查器,等待捕捉事件

  圖 4 運行事件探查器

  5)跟蹤了足夠的信息後,停掉事件探查器,將跟蹤信息保存到一個文件中,或者保存到一個數據表中,若是保存到表中,須要指定表名,SQL Server會自動建立表中的字段。

  圖 5 將探查器跟蹤數據保存到表中

  6)執行下面的SQL查詢語句找出執行代價較高的TSQL

SELECT TextData,Duration,…, FROM Table_Name ORDER BY

  Duration DESC

  圖 6 查找成本最高的TSQL/存儲過程

  有效利用SQL事件探查器排除與性能相關的問題

  SQL事件探查器除了能夠用於找出執行成本最高的那些TSQL或存儲過程外,還能夠利用它許多強大的功能診斷和解決其它不一樣類型的問題。當你收到一個性能問題報告後,或者想提早診斷潛在的性能問題時均可以使用SQL事件探查器。下面是一些SQL事件探查器使用技巧,或許對你有幫助。

  1)使用現有的模板,但須要時應建立你本身的模板

  大多數時候現有的模板可以知足你的需求,但當診斷一個特殊類型的數據庫性能問題時(如數據庫發生死鎖),你可能須要建立本身的模板,在這種狀況下,你能夠點擊「文件」*「模板」*「新建模板」建立一個新模板,須要指定模板名、事件和列。固然也能夠從現有的模板修改而來。

  圖 7 建立一個新模板

  圖 8 爲新模板指定事件和列

  2)捕捉表掃描(TableScan)和死鎖(DeadLock)事件

  沒錯,你可使用SQL事件探查器監聽這兩個有趣的事件。

  先假設一種狀況,假設你已經在你的測試庫上建立了合適的索引,通過測試後,如今你已經將索引應用到生產服務器上了,但因爲某些不明緣由,生產數據庫的性能一直沒達到預期的那樣好,你推測執行查詢時發生了表掃描,你但願有一種方法可以檢測出是否真的發生了表掃描。

  再假設另外一種狀況,假設你已經設置好了將錯誤郵件發送到一個指定的郵件地址,這樣開發團隊能夠第一時間得到通知,並有足夠的信息進行問題診斷。某一天,你忽然收到一封郵件說數據庫發生了死鎖,並在郵件中包含了數據庫級別的錯誤代碼,你須要找出是哪一個TSQL創造了死鎖。

  這時你能夠打開SQL事件探查器,修改一個現有模板,使其能夠捕捉表掃描和死鎖事件,修改好後,啓動事件探查器,運行你的應用程序,當再次發生表掃描和死鎖事件時,事件探查器就能夠捕捉到,利用跟蹤信息就能夠找出執行代價最高的TSQL。

  注意:從SQL Server日誌文件中可能也能夠找到死鎖事件記錄,在某些時候,你可能須要結合SQL Server日誌和跟蹤信息才能找出引發數據庫死鎖的數據庫對象和TSQL。

  圖 9 檢測表掃描

  圖 10 檢測死鎖

  3)建立重放跟蹤

  某些時候,爲了解決生產數據庫的性能問題,你須要在測試服務器上模擬一個生產環境,這樣能夠重演性能問題。使用SQL事件探查器的TSQL_Replay模板捕捉生產庫上的事件,並將跟蹤信息保存爲一個.trace文件,而後在測試服務器上播放跟蹤文件就能夠重現性能問題是如何出現的了。

  圖 11 建立重放跟蹤

  4)建立優化跟蹤

  數據庫調優顧問是一個偉大的工具,它能夠給你提供很好的調優建議,但要真正從它那得到有用的建議,你須要模擬出與生產庫同樣的負載,也就是說,你須要在測試服務器上執行相同的TSQL,打開相同數量的併發鏈接,而後運行調優顧問。SQL事件探查器的Tuning模板能夠捕捉到這類事件和列,使用Tuning模板運行事件探查器,捕捉跟蹤信息並保存,經過調優顧問使用跟蹤文件在測試服務器上建立相同的負載。

  圖 12 建立Tuning事件探查器跟蹤

  5)捕捉ShowPlan在事件探查器中包括SQL執行計劃

  有時相同的查詢在測試服務器和生產服務器上的性能徹底不同,假設你遇到這種問題,你應該仔細查看一下生產數據庫上TSQL的執行計劃。但問題是如今不能在生產庫上執行這個TSQL,由於它已經有嚴重的性能問題。這時SQL事件探查器能夠派上用場,在跟蹤屬性中選中ShowPlan或ShowPlan XML,這樣能夠捕捉到SQL執行計劃和TSQL文本,而後在測試服務器上執行相同的TSQL,並比較二者的執行計劃。

  圖 13 指定捕捉執行計劃

  圖 14 在事件探查器跟蹤中的執行計劃

  使用性能監視工具(PerfMon)診斷性能問題

  當你的數據庫遇到性能問題時,大多數時候使用SQL事件探查器就可以診斷和找出引發性能問題的背後緣由了,但有時SQL事件探查器並非萬能的。

  例如,在生產庫上使用SQL事件探查器分析查詢執行時間時,對應的TSQL執行很慢(假設須要10秒),但一樣的TSQL在測試服務器上執行時間卻只要200毫秒,經過分析執行計劃和數據列,發現它們都沒有太大的差別,所以在生產庫上確定有其它問題,那該如何揪出這些問題呢?

  此時性能監視工具(著名的PerfMon)能夠幫你一把,它能夠按期收集硬件和軟件相關的統計數據,還有它是內置於Windows操做系統的一個免費的工具。

  當你向SQL Server數據庫發送一條TSQL語句,會產生許多相關的執行參與者,包括TSQL執行引擎,服務器緩存,SQL優化器,輸出隊列,CPU,磁盤I/O等,只要這些參與者任何一環執行節奏沒有跟上,最終的查詢執行時間就會變長,使用性能監視工具能夠對這些參與者進行觀察,以找出根本緣由。

  使用性能監視工具能夠建立多個不一樣的性能計數器,經過圖形界面分析計數器日誌,此外還能夠將性能計數器日誌和SQL事件探查器跟蹤信息結合起來分析。

  性能監視器基本用法介紹

  Windows內置了許多性能監視計數器,安裝SQL Server時會添加一個SQL Server性能計數器,下面是建立一個性能計數器日誌的過程。

  1)在SQL事件探查器中啓動性能監視工具(「工具」*「性能監視器」);

  圖 15 啓動性能監視工具

  2)點擊「計數器日誌」*「新建日誌設置」建立一個新的性能計數器日誌

  圖 16 建立一個性能計數器日誌

  指定日誌文件名,點擊「肯定」。

  圖 17 爲性能計數器日誌指定名字

  3)點擊「添加計數器」按鈕,選擇一個須要的計數器

  圖 18 爲性能計數器日誌指定計數器

  4)從列表中選擇要監視的對象和對應的計數器,點擊「關閉」

  圖 19 指定對象和對應的計數器

  5)選擇的計數器應顯示在窗體中

  圖 20 指定計數器

  6)點擊「日誌文件」標籤,再點擊「配置」按鈕,指定日誌文件保存位置,若是須要如今還能夠修改日誌文件名

  圖 21 指定性能計數器日誌文件保存位置

  7)點擊「調度」標籤,指定一個時間讀取計數器性能,寫入日誌文件,也能夠選擇「手動」啓動和中止計數器日誌。

  圖 22 指定性能計數器日誌運行時間

  8)點擊「常規」標籤,指定收集計數器數據的間隔時間

  圖 23 設置計數器間隔採樣時間

  9)點擊「肯定」,選擇剛剛建立的計數器日誌,點擊右鍵啓動它。

  圖 24 啓動性能計數器日誌

  10)爲了查看日誌數據,再次打開性能監視工具,點擊查看日誌圖標(紅色),在「源」標籤上選中「日誌文件」單選按鈕,點擊「添加」按鈕添加一個日誌文件。

  圖 25 查看性能計數器日誌

  11)默認狀況下,在日誌輸出中只有三個計數器被選中,點擊「數據」標籤能夠追加其它計數器。

  圖 26 查看日誌數據時追加計數器

  12)點擊「肯定」,返回圖形化的性能計數器日誌輸出界面

  圖 27 查看性能計數器日誌

  關聯性能計數器日誌和SQL事件探查器跟蹤信息進行深刻的分析

  經過SQL事件探查器能夠找出哪些SQL執行時間過長,但它卻不能給出致使執行時間過長的上下文信息,但性能監視工具能夠提供獨立組件的性能統計數據(即上下文信息),它們正好互補。

  若是相同的查詢在生產庫和測試庫上的執行時間差異過大,那說明測試服務器的負載,環境和查詢執行上下文都和生產服務器不同,所以須要一種方法來模擬生產服務器上的查詢執行上下文,這時就須要結合SQL事件探查器的跟蹤信息和性能監視工具的性能計數器日誌。

  將兩者結合起來分析能夠更容易找出性能問題的根本緣由,例如,你可能發如今生產服務器上每次查詢都須要10秒,CPU利用率達到了100%,這時就應該放下SQL調優,先調查一下爲何CPU利用率會上升到100%。

  關聯SQL事件探查器跟蹤信息和性能計數器日誌的步驟以下:

  1)建立性能計數器日誌,包括下列常見的性能計數器,指定「手動」方式啓動和中止計數器日誌:

  --網絡接口\輸出隊列長度

  --處理器\%處理器時間

  --SQL Server:緩衝管理器\緩衝區緩存命中率

  --SQL Server:緩衝管理器\頁面生命週期

  --SQL Server:SQL統計\批量請求數/秒

  --SQL Server:SQL統計\SQL 編譯

  --SQL Server:SQL統計\SQL 從新編譯/秒

  建立好性能計數器日誌,但不啓動它。

  2)使用SQL事件探查器TSQL Duration模板建立一個跟蹤,添加「開始時間」和「結束時間」列跟蹤,同時啓動事件探查器跟蹤和前一步建立的性能計數器日誌;

  3)跟蹤到足夠信息後,同時停掉SQL事件探查器跟蹤和性能計數器日誌,將SQL事件探查器跟蹤信息保存爲一個.trc文件;

  4)關閉SQL事件探查器跟蹤窗口,再使用事件探查器打開.trc文件,點擊「文件」*「導入性能數據」關聯性能計數器日誌,此時會打開一個文件瀏覽器窗口,選擇剛剛保存的性能計數器日誌文件進行關聯;

  5)在打開的窗口中選擇全部計數器,點擊「肯定」,你將會看到下圖所示的界面,它同時顯示SQL事件探查器的跟蹤信息和性能計數器日誌;

  圖 28 關聯SQL事件探查器和性能監視工具輸出

  6)在事件探查器跟蹤信息輸出中選擇一條TSQL,你將會看到一個紅色豎條,這表明這條TSQL執行時相關計數器的統計數據位置,一樣,點擊性能計數器日誌輸出曲線中高於正常值的點,你會看到對應的TSQL在SQL事件探查器輸出中也是突出顯示的。

  我相信你學會如何關聯這兩個工具的輸出數據後,必定會以爲很是方便和有趣。

  小結

  診斷SQL Server性能問題的工具和技術有不少,例如查看SQL Server日誌文件,利用調優顧問(DTA)得到調優建議,不管使用哪一種工具,你都須要深刻了解內部的細節緣由,只有找出最根本的緣由以後,解決性能問題纔會駕輕就熟。

  本系列最後一篇將介紹如何優化數據文件和應用分區。

  優化技巧主要是面向DBA的,但我認爲即便是開發人員也應該掌握這些技巧,由於不是每一個開發團隊都配有專門的DBA的。

相關文章
相關標籤/搜索