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