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



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