Sql-Server-2008

SQL Profiler - 使用 HostName 過濾器編寫跟踪腳本

  • December 23, 2014

我有一堆腳本化的跟踪定義,用於不同級別的診斷,沒有一個按主機名過濾。我今天需要按主機過濾流量,所以:

  1. 啟動探查器
  2. 創建了一個空跟踪
  3. 添加 SP:開始/完成
  4. 在主機名上設置過濾器
  5. 腳本化到 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 中的一個錯誤。

引用自:https://dba.stackexchange.com/questions/4798