.Net+SQL Server公司專屬應用程式效能最佳化筆記4——精確尋找瓶頸

來源:互聯網
上載者:User

前面幾篇最佳化筆記寫的太過概括,有朋友建議我把最佳化的步驟和方法寫詳細點,這篇比較我就詳細講解下使用ANTS Profiler+SQL Server Profiler尋找瓶頸所在。

首先我們需要部署一個測試環境,將Web項目的原始碼拷到測試環境Web伺服器IIS上,使得可以直接通過IE訪問我們的網站。SQL Server環境可以部署在同一台機器上,條件允許的話有專門的資料庫測試伺服器那當然是更好,沒有也無所謂。部署完測試環境後保證我們這個測試環境沒有其他使用者在訪問,只有我們訪問,免得其他使用者的操作影響了我們。

假設我們的網站在首頁開啟的時候很慢,需要10多秒鐘才能開啟,首頁開啟是調用了多個函數,函數中調用了多個預存程序,到底是哪個函數慢?到底是哪個預存程序慢?是Web伺服器上的函數執行花費了大量的時間還是資料庫中的預存程序執行花費了大部分時間?到底每個函數,每個預存程序各自花費了多少時間呢?這些問題就需要通過ANTS Profiler和SQL Server Profiler來解決。

使用ANTS Profiler和SQL Server Profiler進行瓶頸尋找的過程如下:

(1)在Web伺服器上安裝並開啟ANTS Profiler,在Profiler項目嚮導中選擇Profiler類型為詳細模式,:

(2)單擊“下一步”按鈕,出現要進行跟蹤的應用程式類型,這裡是將項目發布到IIS中的,所以選擇第二個。

(3)單擊“下一步”按鈕,出現ASP.NET應用程式配置介面,設定應用程式起始頁、.NET版本、IIS版本和要進行跟蹤的連接埠。

(4)單擊“下一步”按鈕進入代碼跟蹤選擇介面,選擇將所有的.NET方法進行跟蹤,也可以選擇第一個選擇,只對有調試檔案和原始碼的方法進行跟蹤。

(5)這裡我們要跟蹤的是首頁,所以一旦單擊“完成”按鈕系統就會開啟IE瀏覽器載入首頁,在單擊“完成”按鈕之前,需要對測試環境資料庫開啟SQL Server Profiler。SQL Server Profiler負責追蹤資料庫上執行的指令碼情況,建議將跟蹤結果儲存到資料庫中,這樣可以通過SQL語句來尋找跟蹤的指令碼。將跟蹤結果儲存到資料庫的配置如:

(6)對於跟蹤事件,如果是進行簡單的效能跟蹤,則只需要選中RPC:Completed和SQL:BatchCompleted兩個事件即可。至於關注的列,主要是關注TextData、CPU、Reads、Writes、Duration等列,其他列不用特別關心,採用預設選項即可,:

(7)單擊SQL Server Profiler中的“運行”按鈕,開始對資料庫的跟蹤,然後單擊ANTS Profiler嚮導中的“完成”按鈕,開啟對ASP.NET應用程式的跟蹤。

(8)系統將開啟IE瀏覽器,提示輸入有效使用者名稱和密碼,過幾十秒鐘後,首頁就可以完整展示出來了。SQL Server Profiler中也跟蹤到了大量在首頁載入時執行的SQL語句和預存程序。

(9)單擊ANTS Profiler工具列中的“獲得快照”按鈕,系統將會為ASP.NET應用程式建立快照,然後列出從運行開始到快照時刻系統中執行時間最長的方法和方法的原始碼,:

(10)從中可以看到當前最長時間的一個方法是ViewMainQueryFGS.aspx.cs中的Page_Load方法,該方法花費了13.27秒,而具體花費時間的地方是在Page_Load方法中調用了BindTable方法。

(11)使用VS開啟程式原始碼,或者是在ANTS Profiler中,點擊查看BindTable方法,我們可以看到該方法中有兩個函數調用比較耗時,一個是378行,花費了11.1秒,另一個是38行,花費了2.14秒,。

(12)使用同樣的方法可以查看到GetDataListBySQL方法具體調用了哪些方法,各個方法多少秒。這裡通過查看原始碼我們可以知道,該方法最終是調用了資料層中的p_cx_prodplanfinish預存程序,切換到SQL Server Profiler,我們可以看到系統調用該預存程序花費了10.98秒。

(13)現在我們再回過頭來算一下,整個頁面載入花了13.27秒(Page_Load方法的時間),其中光執行這個預存程序就花了10.98秒,顯然,這個瓶頸是在預存程序p_cx_prodplanfinish上,首先應該對該預存程序進行最佳化。另外還有個2.14秒的地方調用了另外一個預存程序,也可以進行最佳化。

使用同樣的方法,用ANTS Profiler和SQL Server Profiler就可以找出具體是哪個函數最耗時,耗了多少時間,哪個預存程序最耗時,耗了多少時間。確定了到底是應用程式消耗了大量時間還是預存程序消耗了大量時間,接下來可以有的放矢了。

這篇文章是我半個月前完成的,但是由於接下來出差,所以一直沒有發表,現在出差完了,終於有時間發表該文章了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.