使用SQL Nexus整合----熟悉SQL Nexus

SQL Nexus是一個用於將SQL Trace數據、性能監視日誌及T-SQL輸出整合進一個單獨的SQL Server數據庫的工具。這章解釋如何將SQLdiag收集的數據導入到一個SQL Server數據庫,然後藉助SQL Nexus裏已存在的報表來分析它。SQL Nexus是一個免費的工具,可以從Microsoft CodePlex網站下載。SQL Nexus使用3個組件:

SQL Nexus主頁有下載鏈接及源碼,你可以發佈評論並提相關的問題。

先決條件

開始使用SQL Nexus之前,注意下面要做的事項:

  • 安裝Microsoft SQL Server 2008 SP1 Report Viewer控件,以便使用工具自帶的客戶端報表查看整合的報告;
  • 安裝RML Utilities,以便SQL Nexus導入SQL Traces;
  • 如果你使用SQL Server 2012,安裝SQL Server 2008 Native Client,它可以在MS下載網站獲取;
  • 覈實安裝.NET Framework 2.0
  • 使用SQL Server 2012或更低的數據庫引擎,導入採集的數據(不推薦導入到生產SQL Server實例,因爲耗資源)。

一旦你滿足了上述的先決條件,你就可以從http://sqlnexus.codeplex.com/下載最新的SQL Nexus,並使用sqlnexus.exe啓動工具。啓動後,會提示你提供SQL Server實例名及認證信息,以連接到你想導入數據的實例。該工具默認的數據庫是sqlnexus。圖12-1顯示了SQL Nexus工具的登錄頁面:

圖12-1顯示了Tasks選項和導入數據的Import連接。點擊Import選項後,就出現瞭如圖12-2所示的Data Import對話框。SQL Nexus有3種Importer,如圖12-3所示。

  • BLG Blaster----將PerfMon和sysmon文件導入到2張表([dbo].[CounterData]和[dbo].[CounterDetails])。
  • ReadTrace----使用ReadTrace.exe將數據從SQL Trace導入到SQL Nexus數據庫。所有導入的SQL Trace數據均可在ReadTrace schema下看到。
  • Rowset Importer----解析T-SQL腳本輸出,並將它們導入到相關的數據庫表中。SQL Server Perf Stats腳本的輸出組成數據塊(bulk),導入到SQL Nexus數據庫表。

注意,當前沒有可用的報表用於導入到SQL Nexus數據庫的性能計數器數據。你要麼寫T-SQL去查看和整合導入數據,要麼創建定製報表來查看PerfMon數據。

 把數據裝載到Nexus數據庫

 每次啓動SQL Nexus時,會顯示連接SQL Server的對話框。SQL Nexus是一個“離線”分析工具,這意思是它分析的是以採集好的數據。當你連接SQL Server實例時,SQL Nexus會尋找一個叫做“sqlnexus”的數據庫。如果發現了,那麼恢復模式就被設置爲簡單,以確保不必管理事務日誌。如果不存在,那麼會創建一個50MB數據文件的數據庫。一旦你提供了路徑,點擊Import按鈕,這會初始化導入,相關的importer會提取、解析並把相關的數據導入到合適的表中。如果導入數據的過程中遇到任何錯誤或異常,你可以查看SQL Nexus日誌文件,它位於%temp%/sqlnexus.000.log。萬一你不能解決問題,你可以把該日誌文件附在SQL Nexus CodePlex網站的Discussion/Issue Tracker頁面,你也可以在該頁面瀏覽常見問題的解答等。BLG Blaster和Rowset Importer和它們的任務直接相關,但是這裏要特別提一下ReadTrace Importer。圖12-4顯示了ReadTrace importer的不同選項。

下面列表描述了每個選項:

  • Output trace fi les (.trc) by SPID to %TEMP%\RML------當你想提取SPID/Session ID相關的事件到單獨的SQL Trace文件時,這個選項就是有幫助的。
  • Output RML fi les (.rml) to %TEMP%\RML------生成Replay Markup Language (RML)文件時有用。RML是一個類似XML格式的文件,它用於重現(replay)和OSTRESS之間的數據交換。.TRC事件被分解爲一系列RML節點,這使得OSTRESS能夠重現活動。
  • Assume QUOTED_IDENTIFIER ON------RML Utilities執行規範化的查詢,提交給數據庫引擎以便爲規範的SQL Server文本生成Hash ID。如果該選項設爲OFF,那麼規範化解析就會由QUOTED IDENTIFIER OFF語義完成,默認爲ON。
  • Ignore events associated with PSSDIAG activity------使用HOSTNAME過濾參數減少PSSDIAG執行的T-SQL查詢的結果。
  • Disable event requirement checks------爲了得到準確的整合數據,RML Utilities需要捕捉開始和完成的事件。如果沒有抓到必要的事件,那麼SQL Trace會導入失敗。可以爲Trace文件覆蓋它,以至於這些文件可以導入到SQL Nexus數據庫。
  • Enabled -T35 to support MARS------這個用於ReadTrace可執行程序的跟蹤標記不是SQL Server實例跟蹤標記。RML Utilities對於MARS (Multiple Active Result Sets)提供局部支持。使用的公式是[(Session Id * 10) + BatchId]。這啓用基本性能分析功能。啓用這個選項也會禁用RML輸出處理。啓用這個選項時,SQL Nexus用參數-T35和-f調用ReadTrace。

 數據默認導入一個叫sqlnexus的數據庫,它是SQL Nexus連接到SQL Server實例時創建的。該數據庫一次僅能存儲一個實例上的診斷數據,因此每次導入時都會重建。如果你想保存之前導入的結果,你可以在下次導入前備份數據庫,或者爲每次導入創建一個新的數據庫。你可以通過右上角的下拉框,選擇New Database選項創建,如圖12-5所示:

如果你想把診斷數據導入到已經有Nexus數據的數據庫,就會提示覆蓋數據庫。此時,你要麼選擇覆蓋,要麼創建一個新的數據庫。創建新的數據庫是個好的實踐,因爲你可以通過T-SQL或Reporter.exe來做比較分析。

如果你使用SQL Nexus導入數據時遇到問題,你可以點擊Open Nexus Log來查看日誌文件,如圖12-6所示。Rowset Importer負責導入文本文件,relog.exe負責PerfMon數據導入。SQL Nexus日誌文件位於temp文件夾,你可以在Run裏使用%temp%環境變量來訪問。如果你導入SQL Trace文件時遇到問題,那麼點擊Open ReadTrace Log選項,它位於%temp%/RML文件夾。這個日誌文件不僅有利於解決導入問題,還能在手動導入不同trace文件時幫你確定傳入ReadTrace可執行文件的參數。

 

分析整合的數據

既然成功把診斷數據裝載到SQL Nexus數據庫,那麼這裏將介紹如何利用SQL Nexus自帶的報表集。在SQL Nexus歡迎界面的左側,你可以選擇想要查看的報表。如果報表沒有包含必要的數據集,那麼會彈出如圖12-7所示的提示。

有3個可用的報表集,SQL Server 2000/2005/2008 Perf Stats。SQL Server 2008 Perf Stats報表可用於SQL Server 2008實例及更高版本實例的診斷數據。一旦這個報表涮洗成功,就會顯示如圖12-8所示的可用報表集:

注意,如果你使用sp_blocker_pss08捕捉阻塞信息,那麼你需要用SQL Server 2000 Perf Stats報表來查看阻塞報告。可以從CodePlex網站下載SQL Server Perf Stats腳本,也可以從SQL Server 2012實例上收集阻塞和等待統計信息。下面先來看看SQL Server 2008 Perf Stats Reports自帶的non-Profiler跟蹤整合報告。Bottleneck Analysis報告提供3種輸入集:

  • SQL 進程 vs 系統CPU使用,包括其它來自DMV sys.dm_os_ring_buffers的進程;
  • 基於SQL 2005/2008 Perf Stats腳本抓取的不同等待的瓶頸分析圖表;
  • 以類別彙總不同等待的表,及數據採集期間所觀測到的每種等待類別的聚合比重

如圖12-9所示,瓶頸分析報表的前兩節表明CPU使用率不高,然而在數據採集期間發現了鎖-阻塞問題。瞟一眼報表,你可以推斷出過多的之前沒有調查到的系統信息。這就是爲何SQL Nexus廣泛應用於SQL Server專業人員:它快速洞察收集到的診斷數據。當然,你仍然需要從報告中勾畫出自己的相關分析,這個工具僅僅扮演着提供用於分析的相關輸入的媒介。

報告中第二塊信息是圖形查詢,它給你觀察到了不同等待的聚合視圖,分組到類別。圖12-10中,注意41%的等待貢獻給了鎖。因此,基於單份報告,你可以確定SQL Server實例有阻塞瓶頸。下一步便是向下鑽取數據,以弄清阻塞瓶頸更細的細節。

現在把焦點轉向Blocking and Wait Statistics報告,這份報告顯示了頂端的等待類別的快照,和阻塞鏈列表。圖12-11顯示了該報告的一個實例:

 阻塞鏈列表包含兩個額外級別的細節,它提供更多關於某個特定時間點的head blocker及與其關聯的阻塞鏈相關的信息(如圖12-12)。Head blocker對話信息與不同的快照變量一起,顯示在第一層鑽取。點擊運行時超鏈接,會進入第二層鑽取,該層將顯示在那個時間點的不同對話的狀態。

第二層鑽取顯示隨同阻塞對話一起的所有活動的請求的快照及它們的等待時間(如圖12-13)。你可以點擊任何Session ID超鏈接來獲取特定session的額外信息,和該session的輸入緩存區一起。

Blocking和Wait Statistics報告有助於你先下鑽取數據採集期間觀察到的阻塞鏈。即使你沒有收集SQL Trace文件,SQL Server 2005/2008 Perf Stats腳本也會捕獲足夠的細節,來告訴你誰阻塞什麼及原因。使用3Ws,你可以更好地精確定位head blocker。

 剛剛談到的兩個報告,提供了最常見的阻塞及瓶頸場景相關的信息,而不必對導入到SQL Nexus數據庫的聚合數據寫一個T-SQL查詢。還有一些其他的報告,可以讓你能夠洞察數據分析。第二個報告是Query Hash報告,它使用query_hash值來追蹤類似的查詢。數據由SQL Server 2008 Perf Stats Snapshot腳本收集,該腳本在SQLDIAG採集開始及結束時運行。這份報告洞察 TOP CPU、Duration及Logical Reads。這些信息是從DMV sys.dm_exec_query_stats檢索來的,該DMV存放緩存的查詢計劃的整合性能統計。要記住這一要點,因爲有問題的查詢不會出現在這張報告中,如果查詢計劃沒有被緩存或被移除緩存。

Spinlock Stats報告整合所有SQL Perf Stats腳本在數據採集期間的top spins/collision,並提供top category的圖形化視圖。這張報告可通過點擊SQL Server 2005/2008 Perf Stats報告(圖12-8)獲得。這張報告用得不太廣泛,但在診斷niche性能問題時非常有用,niche性能問題在前面提到的報告中不明顯。Spinlock是一種輕量型的鎖機制,非常短時間地鎖定資源。在鎖請求不成功時,不會屈服去處理器,而是循環並定期檢查看是否有可用的訪問。

 熟悉RML Utilities Reports

看過非Profiler相關數據的報告後,這裏看看SQL Trace數據相關的報告。SQL Trace數據由ReadTrace可執行程式導入到SQL Nexus數據庫。當RML Utilities安裝ReadTrace_Main報告報表頭下時,SQL Nexus裏有一套可用的報告。如果安裝RML Utilities之後不能看到ReadTrace_Main報告時,可參考後面“解決常見問題”中講到的Issue #1。

 ReadTrace_Main報告提供裏不同batch的整合視圖,線圖顯示了所有batch的Duration、CPU使用、讀取及寫入的變化,如圖12-14所示。

該報告的下半部分如圖12-15所示,它提供了一張表及所有從SQL Trace文件導入的數據的整合概要。列Interval Start可以鑽取顯示那個時間區間的TOP N查詢,其彙總CPU使用、Duration、寫入及讀取。如果你使用ReadTrace_Main報告頂部的Unique Batch或Unique Statement超鏈接,你可以查看整個數據採集期間最耗資源的查詢列表。如果你鑽取查看每個查詢的細節,你會發現兩個選項,也就是按batch和statement向下鑽取。

你還可以對報告使用過濾,選擇應用程序名或數據庫ID或登錄名。你還可以使用Parameter欄來改變開始和結束時間。

Interesting Events報告,如圖12-16所示,它識別數據採集期間發生的不同事件,這有助於你解決問題。該報告以類型、運行時間隔對不同事件進行分組,以便做分析。例如查詢取消、排序警告、哈希警告及異常。Parameter欄可以讓你縮短時間窗。

當你查看顯示unique batch或unique statement信息的報告時,你可以通過點擊batch或查詢來鑽取。這能讓你看到在某個時間間隔中每個執行的CPU使用、Duration、讀和寫。你也可以使用鑽取選項查看batch或statement的查詢計劃及查詢文本。

截至目標,所有討論的報告都可以使用SQL Nexus UI的Export選項以圖12-17所示的格式導出。

如果你使用Export選項,Access Control Lists(ACLs)會應用到報告,以阻止未授權的訪問。導出報告的用戶僅僅是有完全訪問權限的人。Reporter的用戶對數據的傳播負最終責任。

Reporter.exe生成的對比分析報告

要查看前述的報告,你也可以使用Reporter可執行程序,它位於C:\Program Files\Microsoft Corporation\RMLUtils文件夾中,雙擊可以啓動Reporter.exe。Reporter能夠幫你做比較分析。如果你在不同時間對同一個SQL Server實例收集到兩套診斷數據,那麼你就可以把SQL Trace數據導入到來那個獨立的數據庫,並使用Reporter執行自動比對分析。一旦分析完成,就會顯示如圖12-18所示的對比圖。在Comparison Overview報告的底部細節表顯示了查詢的彙總概要的對比。RML Utilities Help文件對報告及使用有詳細的說明。

 


http://blog.csdn.net/burgess_liu/article/details/22093135
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章