最近在測試查詢功能,需要對查詢語句的執行效率進行測試,暫時我也沒找到比較好用的方法,下面是我在測試時用的笨辦法,記錄下來,權當是一次profiler探索之旅:
“在程序這個功能模塊中用到的查詢語句是什麼?”
這個可以直接 問開發人員,也可以自己找。因爲有時候開發自己有時候也不記得自己用到了多少查詢,用到了哪些語句。因此,如果程序能自己找到是最好了。在無法看到源程序的時候,可以使用SQL Server工具菜單下自帶有SQL Server Profiler跟蹤某個功能模塊的全部SQL 語句。操作步驟如下:
1、打開profiler需要輸入數據庫的賬號密碼,打開界面後會自動顯示新建跟蹤。
2、在常規選項卡中選擇跟蹤結果的保存位置(也可以不選);
3、在事件選擇中挑選你的跟蹤項目。在不清楚自己該如何篩選的時候,可以把以下選項勾上
stored procedures下的
RPC:completed (RPC表示存儲過程中使用遠程過程調用通過OLEDB執行),
SP:completed (存儲完成事件)
SP stmtcompleted (存儲過程中一條SQL完成的事件)
TSQL下的
SQL:BatchCompleted (T-SQL 批完成事件)
SQL:stmtCompleted (一條T-SQL語句完成事件)
4、點擊運行它就開始跟蹤數據庫的所有操作了。
5、運行一次需要查找SQL語句的功能模塊。
爲了在profiler跟蹤到的大量的SQL操作中找到自己需要的那個,首先要了解自己的操作的特徵。比如我需要尋找的SQL語句是一個根據關鍵字(如“白天”)查找的查詢語句,那麼這個SQL語句一定類似
select……from……where XXX='白天'
那麼在查找工具中輸入關鍵字“白天”,就可以找到相關的查詢語句(TextData中)。同時可以得到該查詢的相關信息:登錄名,讀取數據的次數,佔用時間,開始時間,結束時間等。由於該功能模塊相關的所有SQL語句的SPID是一致的,那麼就可以點擊文件中的屬性菜單通過事件篩選中的列篩選器取出所有SPID與剛剛找到的查詢語句相同的,就是該功能模塊的SQL語句了。
實際在剛剛的過程中,Duration(單位毫秒)就是執行時間了。多個用戶併發也可以找到執行時間。
當然也可以通過LoadRunner的錄製,但是LoadRunner錄製的腳本只能得到單個用戶的運行時間,對併發測試需要惠普的license,估計對大多數的公司這個還是有點困難的。