Sql-Server-2008
SQL Profiler - 使用 HostName 過濾器編寫跟踪腳本
我有一堆腳本化的跟踪定義,用於不同級別的診斷,沒有一個按主機名過濾。我今天需要按主機過濾流量,所以:
- 啟動探查器
- 創建了一個空跟踪
- 添加 SP:開始/完成
- 在主機名上設置過濾器
- 腳本化到 test.sql 文件
在 SSMS 中打開文件,沒有過濾器的跡象。沖洗,重複,再次相同。假設我在做一些愚蠢的事情,我查找了要使用的值(比它應該更難找到!)並手動添加到我的跟踪定義中,這很有效。
EXEC sp_trace_setfilter @TraceId, 8, 0, 6, N'MyHostName'
回來檢查為什麼我不能從 Profiler 得到這個工作和相同的結果。我發現在從 SSMS 編寫 2000 年的腳本跟踪時提到這是一個問題,但沒有提到 SSMS2005/2008 到 2005/2008 伺服器的這種情況。這是 Profiler 中的錯誤嗎?
在 Profiler 2005 中生成腳本時,為邏輯運算符保存的預設值是 1=‘OR’,因此跟踪將擷取比我們最初預期的更多的資訊。
exec sp_trace_setfilter @TraceID, 8, 1, 0, N'HOSTNAME1' -- OR exec sp_trace_setfilter @TraceID, 8, 1, 0, N'HOSTNAME2' exec sp_trace_setfilter @TraceID, 8, 1, 0, N'HOSTNAME3' set @bigintfilter = 10 -- reads >= 10 exec sp_trace_setfilter @TraceID, 16, 0, 4, @bigintfilter -- AND exec sp_trace_setfilter @TraceID, 35, 1, 6, N'DB' -- OR
在 Profiler >=2008 中,腳本對要過濾的列的第一次出現具有 0(AND)。
exec sp_trace_setfilter @TraceID, 8, 0, 0, N'HOSTNAME1' -- AND exec sp_trace_setfilter @TraceID, 8, 1, 0, N'HOSTNAME2' exec sp_trace_setfilter @TraceID, 8, 1, 0, N'HOSTNAME3' exec sp_trace_setfilter @TraceID, 35,0, 6, N'DB' -- AND set @bigintfilter = 10 -- reads exec sp_trace_setfilter @TraceID, 16, 0, 4, @bigintfilter -- AND
這看起來像是 Profiler 2005 中的一個錯誤。