前言
今天整理了下sqlserver profiler(SQL Server 事件探查器),好久沒有用了,確實生疏了許多,也是時候花點時間整理下了,本文是參考的原文在這里(這位仁兄有10年的博齡了,涉獵范圍非常廣,多多向他學習吧),我也讀了一些MSDN的文章,擴展了一部分,增加了一些自己的想法。
對象介紹:
SQL Server ProfilerSQL Server Profiler 是一個界面,用於創建和管理跟蹤並分析和重播跟蹤結果。這些事件保存在一個跟蹤文件中,稍后試圖診斷問題時,可以對該文件進行分析或用它來重播一系列特定的步驟。
注意點:
SQL 跟蹤和SQL Server ProfilerSQL Server Profiler不推薦使用。包含 Microsoft SQL Server 跟蹤和重播對象的 Microsoft.SqlServer.Management.Trace 命名空間也已遭棄用。
此功能處於維護模式並且可能會在 Microsoft SQL Server 將來的版本中被刪除。請避免在新的開發工作中使用該功能,並着手修改當前還在使用該功能的應用程序。請改用擴展事件,它是輕量級的,對系統資源的消耗也會比profiler小很多,尤其在系統workload本身很大的時候更加不推薦使用profiler,這將可能是壓倒駱駝的最后一根稻草,不管怎么說,現在還是做一個的介紹,主要針對我的工作中遇到的分析。更多比較詳細的你可以參考 微軟官方文檔。
跟蹤屬性
一、常規
將跟蹤的記錄保存到指定的文件。
1.最大文件大小
指定最大文件大小的跟蹤在達到最大文件大小時,會停止將跟蹤信息保存到該文件。使用此選項可將事件分組成更小、更容易管理的文件。此外,限制文件大小使得無人參與的跟蹤運行起來更加安全,因為跟蹤會在達到最大文件大小后停止。可以為通過 Transact-SQL 存儲過程或使用 SQL Server Profiler創建的跟蹤設置最大文件大小。
最大文件大小選項的上限為 1 GB。默認最大文件大小為 5 MB
注意:最大文件的大小建議不要設的太大,特別是需要用於數據庫引擎優化顧問使用的文件,太大的跟蹤文件需要很長的分析的時間而且由於數據庫引擎優化顧問也是把收集的負載文件執行一遍有時候可能會導致負載過大分析失敗,同時對服務器的壓力持續的時間過長對業務影響也會比較大,默認大小即可,同時啟動文件滾動更新,多次分析。
2.啟用文件滾動更新
如果使用文件滾動更新選項,則在達到最大文件大小時,SQL Server 會關閉當前文件並創建一個新文件。新文件與原文件同名,但是文件名后將追加一個整數以表示其序列。例如,如果原始跟蹤文件命名為 filename_1.trc,則下一跟蹤文件為 filename_2.trc,依此類推。如果指定給新滾動更新文件的名稱已經被現有文件使用,則將覆蓋現有文件,除非現有文件為只讀文件。默認情況下,將跟蹤數據保存到文件時,會啟用文件滾動更新選項。
3.服務器處理跟蹤數據
確保服務器記錄每個跟蹤事件,如果記錄事件會顯著降低性能,可以清除服務器處理跟蹤數據,這樣服務器不會再記錄事件。
4.最大行數
指定有最大行數的跟蹤在達到最大行數時,會停止將跟蹤信息保存到表。每個事件構成一行,因此該參數可設置收集的事件數的范圍。設置最大行數使得無人參與的跟蹤運行起來更加方便。例如,如果需要啟動一個將跟蹤數據保存到表的跟蹤,同時希望在該表變得過大時停止跟蹤,則可以使其自動停止。
如果已指定並且達到了最大行數,將在運行 SQL Server Profiler的同時繼續運行跟蹤,但不再記錄跟蹤信息。SQL Server Profiler將繼續顯示跟蹤結果,直到跟蹤停止
5.啟用跟蹤停止時間
啟用跟蹤停止時間之后,到了指定的時間跟蹤自動停止。每一次跟蹤建議都必須得設置一個跟蹤停止時間防止忘記關閉跟蹤導致服務器空間被占滿,默認跟蹤1小時。
注意:
- 從 SQL Server 2005 開始,服務器以微秒(百萬分之一秒或 10-6 秒)為單位報告事件的持續時間,以毫秒(千分之一秒或 10-3 秒)為單位報告事件使用的 CPU 時間。
- 在 SQL Server 2000 中,服務器以毫秒為單位報告持續時間和 CPU 時間。
- 在 SQL Server 2005 及更高版本中,SQL Server Profiler圖形用戶界面默認以毫秒為單位顯示“持續時間”列,但是當跟蹤保存到文件或數據庫表中之后,將以微秒為單位在“持續時間”列中寫入值。
二、事件選擇
對於不同跟蹤選擇不同的跟蹤事件;通過勾選“顯示所有跟蹤事件”可以看到所有的跟蹤事件,總共有21個事件分類。用得最多的兩個分類就是存儲過程和TSQL這兩個分類主要用來記錄執行的存儲過程和SQL語句,把鼠標移動到具體的事件上面會顯示該事件和事件列的具體說明,接下來就分析幾個常用的事件和常用的事件列。
1.顯示所有跟蹤事件
勾選之后會將所有的事件都顯示出來
2.顯示所有列
勾選之后會將所有的列顯示出來
3.列篩選
對列增加一些條件,其實可以將它理解在TSQL語句的WHERE后面添加條件,對於整形列直接輸入數值即可,對於字符串列就相當於like一樣使用不帶引號的%%模糊匹配方法。通過勾選“排除不包含值的行”之后跟蹤結果就會篩選掉不滿足條件的記錄。
4.列組織
列組織可以理解成TSQL語句里面做GROUP BY操作,可以將相同的條件放在一起去重。
事件
1.SQL:Stmt*******
[SQL:StmtStarting]:啟動TSQL語句時記錄
[SQL:StmtCompleted]:完成TSQL語句時記錄
這兩事件的區別也同單詞的意思一樣,StmtStarting是記錄事件的開始不關注這個事件在接下來會做什么,StmtCompleted是記錄事件結束之后在開始和結束這個過程中做的一些操作比如一些常用的列"Duration","Cpu","Reads","Writes","EndTime"這些列就會出現在StmtCompleted事件中。所以如果你需要收集的記錄不關心整個事件過程中的操作只需要收集數量那么可以使用Starting事件比如記錄某個語句或者存儲過程執行的次數等。
2.SQL:Batch******
[SQL:BatchStarting]:啟動TSQL批處理時記錄
[SQL:BatchCompleted]:完成TSQL批處理時記錄
下面是我日常的監控的模板,在Tuning模板的基礎上增加紅色框的事件列,需要注意的是在篩選事件的時候SPID>50(大於50都是用戶的事件,小於50的是系統事件),database這一欄需要主要,如果你選擇了某一個DB,則表示只是發生在這個DB的事件,如果跨DB訪問到你選中的DB,則不會被記錄到,因為該事件是發生在其他的DB。
ApplicationName
1、如果是在SSMS查詢界面則顯示:Microsoft SQL Server Management Studio - Query,表示該語句是在SSMS界面里面執行的
2、