初探SQL Server 2008的性能數據收集器
SQL Server中有不少工具可以幫助DBA們對性能問題進行識別和排障,諸如事件探查器、系統監視器、數據庫引擎調優顧問、Management Studio和T-SQL命令等等。上述工具中有的可以記錄數據庫的歷史日志,有的則不能。即便你所使用的工具能夠記錄日志,它捕獲和分析日志數據的能力也通常比較難用。除非你手動編寫自己的日志解決方案,有的工具甚至不允許記錄任何類型的日志,諸如監視動態管理視圖(DMV)。不同的工具和數據收集方法的雜亂無章,使得DBA們很難輕松的識別并修復不同的性能問題。
一種完美的情況是,SQL Server應該包含這樣一個工具,它不僅僅能夠自動的收集所有重要性能數據,供DBA們識別和修復性能問題;它還應將這些數據以一種單一的格式進行存儲,并且存儲在同一個地方,而且還包含高級報表功能,以允許DBA們能夠輕松的理解這些數據,從而可以確定相應的解決方案。
盡管SQL Server 2008不包含完美的性能收集和分析工具,它卻提供了一個叫做性能數據收集器的新功能,可以說它已經朝著理想的工具邁出了第一步。
簡而言之,性能數據收集器在以下幾方面對DBA們帶來了幫助:
◆ 作為一個中心數據庫(Central Data Repository)使用
性能數據收集器的一部分是管理數據倉庫(Management Data Warehouse,MDW)。它在一個中心點上存儲所有收集來的數據。它可以存儲來自于單個SQL Server數據庫實例的數據,也可以存儲來自多個實例的數據。盡管SQL Server 2008中的管理數據倉庫功能的重點是存儲性能相關的數據,不過在SQL Server將來的版本中,它將可以存儲你希望從SQL Server中收集的任何數據,諸如擴展事件(Extended Events)、審計數據等等。MDW是可擴展的,因此你可以根據需要,在MDW中存儲自己的數據。
◆ 收集選擇的SQL Server性能數據
MDW用來存儲性能數據,而真正的數據收集工作由數據收集組(Data Collection Sets)來執行。SQL Server 2008具有三個內置的數據收集組:一個用于收集磁盤使用(Disk Usage)信息;另一個用于收集查詢統計數據(Query Statistics);第三個用于收集大量的服務器行為(Server Activities)數據。據微軟表示,這三個數據收集組可以收集那些識別和排障多數常見SQL Server性能問題所需的重要數據。如果你認為這些數據還不夠用,你可以創建自己的定制數據收集組。
◆ 顯示性能報表
存儲在數據倉庫內的數據如果不被使用,就毫無價值。SQL Server 2008包含了三個內置報表,包括磁盤使用摘要(Disk Usage Summary)、查詢統計歷史(Query Statistics History)和服務器行為歷史(Server Activity History)。這些報表都可以讓你檢查單個SQL Server實例的歷史記錄,另外,在每一個報表中,你都可以追溯到子報表中,讓你更詳細的查看服務器信息。如果你認為這些內置報表不夠完整,或者你希望獲得關于特定數據的報表,或者產生包含來自多個SQL Server實例信息的報表,你需要使用SQL Server的Business Intelligence Development Studio或任何其它的報表服務工具,來創建自己的定制報表。
無論是SQL Server 2008標準版還是企業版,都完全支持性能數據收集器功能。它只適用于SQL Server 2008實例,不能兼容此前版本的SQL Server。
如何配置性能數據收集器
在你安裝了SQL Server 2008后,性能數據收集器并沒有默認配置好。你可以通過以下兩步來對其配置,并將其啟用。
1.第一步是使用“配置管理數據倉庫(Configuration Management Data Warehouse)”向導來創建管理數據倉庫數據庫,選擇“創建或升級一個管理數據倉庫(Create or Upgrade a Data Management Warehouse)”選項。盡管這個數據庫可以被存儲在任何SQL Server上,你還是更應該為其專門創建一個數據庫實例。這樣,有助于幫助你降低性能數據收集器對你的生產服務器的影響。一個中心MDW可以為多個SQL Server實例存儲數據。
2.第二步是啟用性能數據收集器。為了實現這個目的,你需要再次啟動“配置管理數據倉庫(Configuration Management Data Warehouse)”向導,不過這次你要選擇“建立數據收集(Setup Data Collection)”選項,然后它會讓你選擇希望將性能數據存儲在哪一個服務器和MDW數據庫上。一旦該向導完成后,性能數據收集器就會被啟用,立即開始數據收集。
圖1 配置管理數據倉庫向導
如果你希望在多個SQL Server 2008實例上啟用性能數據收集器,則必須在每個你希望監控的實例上運行一次該向導,并且每次都把中心MDW數據庫服務器地址指向你的服務器。
#p#
性能數據收集器工作原理
當性能數據收集器初次建立時,它會完成許多幕后工作。例如,它會創建一個SSIS包,用于收集數據并傳送到管理數據倉庫中。它還將創建一系列計劃任務,用戶按設定好的規則來執行任務。另外,它還會在MSDB數據庫增加新表,以存儲日志和其它配置信息。
掌握性能數據收集器工作原理的最簡單方法是,理解數據從一開始產生到最后存儲在MDW中的整個過程。在本文中限于篇幅,我們以服務器行為數據收集器(Server Activity Data Collector)為例進行介紹。
服務器行為數據收集組主要用來收集兩種不同種類的數據:DMV快照和性能計數器,其中后者對于監控SQL Server的整體性能非常有幫助。從服務器行為屬性窗口中可以一目了然的看到這兩種數據類型。
圖2 每一個數據收集組集都有自己的屬性界面
在圖2中,在“收集條目(Collection Items)”下有兩種數據類型。第一個是“Server Activity – DMV Snapshots”,每隔60秒對特定DMV進行一次快照。在“輸入參數(Input Parameters)”下,你可以查看用來收集數據的T-SQL代碼。從圖2截屏中你看到的只是所有代碼的一部分,不過你可以拖動滑動塊來查看其全部代碼。
圖3 服務器行為—性能計數器收集條目被高亮
圖3是選中“Server Activity – Performance Counters”時的截屏。在下面的輸入參數屏幕中,你可以看到,某些性能監控計數器被每隔60秒收集一次。和DMV快照一樣,這只是其中一個特定計數器的快照。
現在我們對服務器行為數據收集組所收集的數據類型有了簡單的了解,那么這個性能數據收集器是如何收集這些信息并將其存儲在MDW中的呢?
數據收集實際上就是部分SQL Server代理任務的按計劃執行。當運行一個任務時,它會啟動一個叫做數據收集器運行組件(dcexec.exe)的程序,用來加載和執行SSIS包。在本文的例子中,SSIS包每隔60秒收集DMV和性能監控器計數器,然后這些信息被存儲在被監控SQL Server實例的一個本地文件夾中。值得注意的是,在上圖中的“Cached – Collect and Update Data on the Same Schedule option,”選項要被選中。
隨后每隔15分鐘,將執行另一個SQL Server代理任務和SSIS包,收集存儲在本地緩存文件夾中的數據,并將其移動到MDW中。從下圖中,你可以看到屬性頁面的另一部分,在這兒你可以設定多長時間進行一次上傳數據。
圖4 設定數據上傳計劃
一旦數據被移動到MDW后,它就以使用三種內置報表之一或任何你創建的定制報表來形成報表。
數據收集器通過兩種不同的方式來實現數據被收集和移動到MDW中:緩沖和非緩沖。緩沖方式就是上面我所介紹的方式,一個任務和SSIS包用于收集數據并將其存儲在本地緩沖文件中,然后另一個任務和SSI包將數據從本地緩沖文件移動到MDW中。這種方式有助于降低數據收集器的負載,因為它降低了數據在監控實例和MDW之間的移動頻率。
非緩沖方式,在磁盤使用數據收集組中使用,其工作方式略有不同。它不使用兩步來移動數據到MDW,而是一步完成收集和上傳數據工作。這種方式會略微增加負載,但是如果不頻繁使用,不會對SQL Server的性能帶來太大影響。
數據收集器的另一個功能是老數據會按照一個默認的計劃來自動從MDW中清除,或者你也可以在圖2和圖3中設定數據在MDW中保留的時間。
你或許會問這樣一個問題,性能數據收集器會產生多大負載。盡管這可能取決于你的服務器的負載以及你的服務器的硬件,通常來講,在默認數據集設置下,它會增加4%左右的CPU利用率,每天收集大約250-300MB的數據。如果你創建自己的數據集合集,其負載可能要更大一些。
#p#
性能數據收集器的報表功能
性能數據收集器包含三個內置報表,每一個默認數據收集組對應一個報表。在本篇文章中,我們不會對每一個進行詳細介紹,只是對它們進行快速的亮點介紹,如果你想深入的了解它們,可以自己去使用研究。
首先,讓我們來看一下磁盤使用報表。
圖5 磁盤使用數據收集組跟蹤報告磁盤空間信息
該報告跟蹤你的MDB和LDF文件的磁盤空間使用情況,既提供真實的數據也可顯示簡單的趨勢線。這些信息可以幫助DBA更加主動,防止遭遇空間用盡的情況發生。點擊其中的任何數據庫,你將看到一個子報表,顯示每一個數據庫中數據是如何劃分空間的。
接下來的報表是查詢統計數據歷史報表。
圖6 使用查詢統計數據歷史報表幫你找出占用大量SQL Server資源的查詢
雖然在上圖的例子中你沒有看到太多查詢行為,不過你所看到的只是使用CPU資源最多的前10個查詢。你可以根據CPU使用率、總體I/O、物理讀操作和邏輯寫等對這些數據進行分類。在你找出了最耗資源的查詢后,你可以對它們逐一進行分析,該報表為你提供了關于該查詢的足夠多的詳細信息,包括它的完整代碼和圖形化執行計劃等。
第三個報表是服務器行為歷史報表。
圖7 服務器行為歷史報表包含性能監控器計數器和DMV的等待狀態信息
在所有報表中,這個報表提供的數據最多。你不僅能夠跟蹤基本硬件資源信息,諸如CPU使用率、內存使用率、磁盤I/O使用情況和網絡使用情況,你還可以查看最活躍的SQL Server等待狀態;以及SQL Server的行為,諸如登錄、事務處理、用戶連接等等。你可以對該界面上的任何信息進行追溯,以查看更詳細具體的信息。
總結
通過本篇文章我們了解到,SQL Server 2008性能數據收集器可以讓我們創建一個中心數據庫來存儲性能數據;它包含三個內置數據收集組來收集和存儲數據;為了幫助我們識別和排除SQL Server性能相關的問題,我們可以使用其內置的三個報表來查看收集存儲的數據。
我需要重點強調的一件事情是,如果你希望在自己的生產服務器上啟用該功能,需要首先進行測試工作。原因有二:一是你必須評估一下它是否能夠提供你想要的信息;二是你是否能接受它所帶來的負載增加。如果這兩方面都沒有問題,你就可以開始設置啟用這個SQL Server 2008的新功能了。
【編輯推薦】