SQL Server Profiler的工作原理
其實SQL Server Profiler這個工具是SQL Trace的一個GUI的版本,而SQL Trace是一組腳本,自SQL Server 2000就已經有了的,這一組腳本捕獲和跟蹤SQL Server內部發生一些事件,並且將跟蹤的數據保存以便后續使用。
從本質上說,SQL Trace就是一個非常簡單的工具,它的作用就是捕獲客戶端應用與SQL Server之前的通信的信息。它扮演中一個非常特殊的網絡嗅探器的功能,用來捕獲與SQL Server相關的網絡活動,同時也允許我們查
看客戶端應用的請求觸發了SQL Server的哪些事件。
掌握SQL Profiler的好處如下:
1.可以監視SQL Server內部發生的各種活動:例如發生在數據庫引擎中的活動,發生在Analysis Services以及Integration Services中的活動。
2.監控並且確認某些查詢,事務相關的性能問題等。
3.可以對執行計划進行分析。
4.可以監視並且確認SQL Server內部的發生的一些錯誤和警告。
5.可以捕獲數據庫發生的數據,並且還可以對數據庫的壓力進行重放。
6.可以對數據庫中用戶的活動進行審計跟蹤。
7.可以通過多種方式對數據進行分析與跟蹤。
8.可以將跟蹤的數據與系統的性能計數器關聯起來,從而更加全面的檢查發生的問題。
9.可以將跟蹤的數據以DTA來進行分析
總之,sql profiler可以跟蹤並記錄分析所有的數據庫行為,當應用運行時,每條sql語句都被跟蹤。並可通過這個查出慢的垃圾sql,從而針對性進行優化
一般情況下,最長查詢時間的查詢語句就是最影響性能的原因存在。它不僅占用數據庫引擎大量的時間,還浪費系統資源,還影響數據庫應用系統的交互速度。再對數據用應用系統進行優化時,先找出他,對其優化,在創建跟蹤時,勾上TSQL-SQL:BatchCompleted.跟Stored Procedures-RPC:completed。這樣就能找出來這個最長時間查詢然后對其進行分析優化。
如下圖所示:
SQL Profiler中常用的術語概念:
1.事件(Events) ——簡而言之就是發生的活動,例如一個存儲過程的執行,就是一個活動,也是發生了一個事件。如下圖部分:
*事件選擇,你就把鼠標放上去,他下面有中文的注釋。自己好好看看,然后根據你自己的需要把事件勾選上來。
2.數據列(Data Columns) ——就是描述事件發生的一些信息,可以看到事件發生的時候,包含了一些實事件信息,即數據列。 例如,對於RPC:Completed事件而言,包含了TextData,ApplicationName等,不是所有事件都有相同的數據列。如下圖部分:
3.過濾器(Filters)——過濾器主要是SQL Profiler用來對發生的事件進行過濾的,只捕獲感興趣的事件。可以根據很多的來創建靈活的過濾,過濾器在使用SQL Profiler中非常有用,因為它可以決定我們收集到的數據的正確性,更加對收集到的數據的量產生很多的影響。如下圖部分:(過濾數據庫,只跟蹤名稱為DBA開頭的數據庫,那個dba%是個篩選監測的DatabaseName。那個%是個通配符,他的意思就是篩選select開頭的數據庫)
4.跟蹤(Trace)
這里的跟蹤,不是個動詞,而是一個名詞!每一個跟蹤包含了發生的事件以及相關的數據列信息,並且我們常常將這些信息保存在物理的文件中。跟蹤文件可以以很多的方式保存:保存在 內存中,保存在數據庫中,保存為XML文件等。在SQL Profiler中運行后 直接顯示了跟蹤信息,即跟蹤信息保存在內存中。如下圖部分:(將跟蹤的信息保存在D盤的datafile 文件夾里)
Profiler自帶跟蹤模板
工具自帶了幾個比較實用的跟蹤模板,一般的跟蹤都可以直接使用自帶的跟蹤模板解決,同時自己也可以創建自定義的跟蹤事件和跟蹤屬性保存成模板供以后使用。
SP_Counts:計算已運行的存儲過程數,並且按存儲過程的名稱進行分組統計,此模板可以分析某時間段存儲過程的行為。
Standard:記錄所有存儲過程和T-SQL語句批處理運行的時間,當你想要監視常規數據庫服務器活動時即可使用該模板,一般的跟蹤需要使用該模板就可以解決,這也是默認的模板。
TSQL:記錄客戶端提交給sqlserver的所有T-SQL語句的的內容和開始時間,通常使用該模板用於程序調試。
TSQL_Duration:記錄客戶端提交給sqlserver的所有T-SQL語句批處理信息以及執行這些語句所需的時間(毫秒),並按時間進行分組,使用該模板可以分析執行慢的查詢,此模板的跟蹤記錄可以用於數據庫引擎優化顧問分析使用。
TSQL_Grouped:按提交客戶端和登入用戶進行分組記錄所有提交給SQLServer的T-SQL批處理語句及其開始時間,此模板用於分析某個客戶或者用戶執行的查詢。
TSQL_Locks:記錄所有開始和完成的存儲過程和T-SQL語句,同時記錄死鎖信息,此模板用於跟蹤死鎖。
TSQL_Replay:記錄有關已發出的T-SQL語句的詳細信息,此模板記錄重播跟蹤所需的信息,此模板可執行跌到優化,例如基准測試。
TSQL_SPs:記錄有關執行的所有存儲過程的詳細信息,此模板可以分析存儲過程的組成步驟。如果你懷疑正在重新編譯存儲過程,請添加SP:Recomple事件
Tuning:記錄有關存儲和T-SQL語句批處理的信息以及執行這些語句所需的時間(毫秒),使用此模板生產跟蹤輸出可用於數據庫引擎優化顧問工作負載來優化索引、優化性能。此模板和TSQL_Druation相似后者是做了時間分組。
sql server profiler的使用
1.打開系統主菜單--Microsoft SQL Server 2008 R2--->>sql server profiler (或者 打開系統主菜單--運行---打開CMD>>profiler )
2.菜單 文件--新建跟蹤--連接數據庫--顯示跟蹤屬性窗口
3.選擇 事件選擇,勾選顯示所有事件和顯示所有列,再點擊列篩選器
4. 指定篩選數據庫為DBA開頭的及跟蹤select的語句,可以隨便定義,如update%,delete%....。把那個排除不包含值的行也給帶上,然后確定,運行。
*每列從左向右,從EventClass開始,分別是:
事件分類,申請了語句,應用程序名稱,操作系統用戶,數據庫用戶,cpu占用率,讀數據庫次數,寫數據庫次說,執行腳本用時,應用程序進程號,開始時間,結束時間等。
接着我們就
使用數據庫引擎優化顧問分析Profiler 生成的.trc 文件去優化數據庫性能
1.打開數據庫引擎優化顧問,開始--Microsoft SQL Server 2008R2--性能工具--數據庫引擎優化顧問,登陸數據庫
2.打開之后,在【常規】頁簽這里的工作負荷中選文件就是Profiler工具中保存的的文件,把要分析的數據庫跟數據庫的表選上;
在【優化選項】頁簽的設計結構選擇索引和索引視圖;
然后點擊 【開始分析】
3.運行完成,點擊【建議】頁簽在這里還給出了你的那些表,需要怎么建立索引和視圖才能更有效的提高性能優化,點擊定義列可顯示優化的Sql語句,直接復制執行就要可以了。