來源:
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