SQL Server 2005+的服務器端跟蹤

來源:

http://www.sqlservercentral.com/articles/SQL Trace/71841/

轉載

http://www.tuicool.com/articles/NnMNnu

 

sql Server啓用服務端的跟蹤相對於SQL Profiler來說對服務器的性能幾乎沒有影響(Profiler的影響幾乎達到50%)

下圖來自於http://sqlblog.com/blogs/linchi_shea/archive/2007/08/01/trace-profiler-test.aspx

 

可以通過如下語句創建SQL Server 服務器端跟蹤,

DECLARE @return_code INT;

DECLARE @TraceID INT;

DECLARE @maxfilesize BIGINT;

SET @maxfilesize =5;--以MB爲單位

--第一步創建跟蹤的定義

EXEC sp_trace_create @traceid OUTPUT , @options = 2 , @tracefile =N'C:\TraceFiles\LongRunningQueries',

@maxfilesize = @maxfilesize ,@stoptime =NULL , @filecount = 2;


其中@option的含義爲

2:TRACE_FILE_ROLLOVER

4:SHUTDOWN_ON_ERROR

8:TRACE_PRODUCE_BLACKBOX

其中2和4的選項可以通過加算被聯合(即6),而8只能被獨立使用

--第二步:給跟蹤添加事件和列

EXEC sp_trace_setevent @traceid = @TraceID ,@eventid = 10 -- RPC:Completed 包含綁定參數值,

 @columnid = 1 -- TextData , @on = 1;--include this columnin trace


其中@eventid和@culumnid的值可以通過如下查詢得到

 SELECT  tcat.name  EventCategoryName ,
        tevent.name  EventClassName ,
        tcolumn.name  EventColumn ,
        tevent.trace_event_id  EventID ,
        tbinding.trace_column_id  ColumnID ,
        tcolumn.type_name  DataType
 FROM   sys.trace_categories  tcat
        JOIN sys.trace_events  tevent
            ON tevent.category_id = tcat.category_id
        JOIN sys.trace_event_bindings AS tbinding
            ON tbinding.trace_event_id = tevent.trace_event_id
        JOIN sys.trace_columns  tcolumn
            ON tcolumn.trace_column_id = tbinding.trace_column_id
 ORDER BY tcat.name ,
        EventClassName ,
        EventColumn ;


--第三步:給跟蹤添加篩選條件(下面的例子是添加一個執行時間超過1000秒的查詢篩選條件)

DECLARE @DurationFilter BIGINT;

SET @DurationFilter =1000000;

EXEC sp_trace_setfilter @traceid = @TraceID ,@columnid = 13 , @logical_operator = 0 --AND

, @comparison_operator = 4 -- greater than or equal to

, @value = @DurationFilter; --filter value


其中@logical_operator值僅在有多個篩選條件時有效,0表示AND,1表示OR

如果對某個列做過濾操作,則不能把他們隔開,需要連續添加,然後還可以與其他列用AND連接起來做過濾條件

@comparison_operator比較操作符含義如下:

含義
0 =
1 !=
2 >
3 <
4 >=
5 <=
6 LIKE
7 NOT LIKE

--第4步啓用跟蹤

DECLARE @TraceID int ;SET @TraceID = 2 ;

-- specify value from sp_trace_create

EXEC sp_trace_setstatus @traceid = @TraceID ,@status =1 ;-- start trace


其中@status值的含義爲

0:停止跟蹤

1:啓動跟蹤

2:關閉並刪除此跟蹤定義


--第5步查看跟蹤的內容:

SELECT *
FROM fn_trace_gettable(N'C:\TraceFiles\LongRunningQueries.trc',DEFAULT);

查看系統中所有跟蹤:

select * from sys.traces



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章