SQL Server中追踪器Trace的介绍和简单使用

原文:SQL Server中追踪器Trace的介绍和简单使用

一.What is Trace?

对于SQL Profiler这个工具相信大家都不是很陌生,没用过的朋友可以在SQL Server Management Studio>工具>SQL Server Profiler处使用。这个工具是用来监控SQL,存储过程的执行,用户登录等等信息。但这个工具只是一个GUI,他的本质就是Trace。下面是Trace的架构:

  

数据库引擎会产生一系列事件,然后各个trace可以去订阅自己感兴趣的事件,一旦数据库产生了相关事件就会发给订阅该事件的trace,各个trace通过自己的过滤器对该事件的信息过滤(例如:捕获执行时间超过1秒的SQL语句),然后放到一个缓冲队列里,最终写入文件或者是一些客户端应用。

简单介绍完理论,下面就开始实践:

How to Create a Trace?

要创建一个追踪器,总共分三步:

1.执行存储过程sp_trace_create创建一个追踪器

2.执行存储过程sp_trace_setevent添加自己想订阅的事件以及最终结果集的列名

3.执行存储过程sp_trace_setfilter设置过滤器来对过滤产生数据

下面是一个创建一个追踪器的SQL脚本

 1 DECLARE @return_code INT;
 2 DECLARE @TraceID INT;
 3 DECLARE @maxfilesize BIGINT;
 4 SET @maxfilesize = 5;
 5 --step 1: create a new empty trace definition
 6 EXEC sp_trace_create
 7                 @traceid OUTPUT
 8                , @options = 2
 9                , @tracefile = N'C:\TraceFiles\LongRunningQueries'
10                , @maxfilesize = @maxfilesize
11     , @stoptime =NULL
12     , @filecount = 2;
13 -- step 2: add the events and columns
14 EXEC sp_trace_setevent
15                 @traceid = @TraceID
16                , @eventid = 10 -- RPC:Completed
17                , @columnid = 1 -- TextData
18                , @on = 1;--include this column in trace
19 EXEC sp_trace_setevent
20                 @traceid = @TraceID
21                , @eventid = 10 -- RPC:Completed
22                , @columnid = 13 --Duration
23                , @on = 1;--include this column in trace
24 EXEC sp_trace_setevent
25                 @traceid = @TraceID
26                , @eventid = 10 -- RPC:Completed
27                , @columnid = 15 --EndTime
28                , @on = 1;--include this column in trace
29 EXEC sp_trace_setevent
30                 @traceid = @TraceID
31                , @eventid = 12 -- SQL:BatchCompleted
32                , @columnid = 1 -- TextData
33                , @on = 1;--include this column in trace
34 EXEC sp_trace_setevent
35                 @traceid = @TraceID
36                , @eventid = 12 -- SQL:BatchCompleted
37                , @columnid = 13 --Duration
38                , @on = 1;--include this column in trace
39 EXEC sp_trace_setevent
40                 @traceid = @TraceID
41                , @eventid = 12 -- SQL:BatchCompleted
42                , @columnid = 15 --EndTime
43                , @on = 1;--include this column in trace
44 -- step 3: add duration filter
45 DECLARE @DurationFilter BIGINT;
46 SET @DurationFilter = 10000000; --duration in microseconds
47 EXEC sp_trace_setfilter
48                 @traceid = @TraceID
49                , @columnid = 13
50                , @logical_operator = 0 --AND
51                , @comparison_operator = 4 -- greater than or equal to
52                , @value = @DurationFilter; --filter value
53 SELECT @TraceID AS TraceID;

对于第九行中的C:\TraceFiles\LongRunningQueries,请确保TraceFiles文件夹存在,而LongRunningQueries是文件名,创建后会自动加上.trc后缀。

对于过滤器中具体的事件以及列名,大家可以参考:http://technet.microsoft.com/zh-cn/library/ms186265(v=sql.105).aspx

对于像我一样的一些初学者,写上面的脚本可能比较吃力,那么我们可以通过SQL Server Profiler配置各种需求,然后导出脚本:

然后把路径等一系列其他参数设置下即可。

三.How to Operate a Trace?

上面我们已经把创建了一个追踪器,但这个追踪器目前并未开始运行,我们可以通过下面的脚本来查看trace的状态

select * from sys.traces

执行之后你会发现有2个trace记录,第一个是SQL Server默认的trace,它提供极其有限的功能,第二个就是我们刚刚创建的trace

status就是指追踪器的状态

@status Action
0 Stops the trace
1 Starts the trace
2 Closes the trace and deletes its definition

 

 

 

操作status的脚本:

-- stop  the trace
 DECLARE @TraceID int ;
 SET @TraceID = 2 ; -- specify value from sp_trace_create
 EXEC sp_trace_setstatus
    @traceid = @TraceID
    ,@status = 0 ;-- stop trace
 -- delete the trace
 EXEC sp_trace_setstatus
    @traceid = @TraceID
  ,@status = 2 ;-- delete trace
 -- start the trace
 EXEC sp_trace_setstatus
    @traceid = @TraceID
  ,@status = 1 ;-- start trace

四.How to Viewing Trace Data?

前面已经说过,追踪器最终把追踪到的信息写到了一个文件里,也就是我们创建时指定的路径。通过一个系统函数就可以查看分析这些数据了:

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

五.Summary

SQL Trace对象提供服务器端的追踪的技术,包括一些存储过程,数据库,视图来创建trace, 通过使用T-SQL和trace暴露的元数据来管理trace数据,这些都是SQL Profiler所无法提供的

 

时间: 2024-09-20 00:28:58

SQL Server中追踪器Trace的介绍和简单使用的相关文章

SQL Server 中的6种事务隔离级别简单总结

原文:SQL Server 中的6种事务隔离级别简单总结   本文出处:http://www.cnblogs.com/wy123/p/7218316.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他)   数据库中的事物是具有原子性(Atomicity),一致性(Consistemcy),隔离性(Isolation),持久性(Durability)四个特征.在上述四个特性中的一致性和隔离性的实现中,是通过锁来实

关于SQL Server中的死锁详解介绍(1/3)

 一些基础知识     要理解SQL Server中的死锁,更好的方式是通过类比从更大的面理解死锁.比如说一个经典的例子就是汽车(主体)对于道路(资源)的征用,如图1所示. 对于死锁的直观理解      在图1的例子中,每队汽车都占有一条道路,但都需要另外一队汽车所占有的另一条道路,因此互相阻塞,谁都无法前行,因此造成了死锁.由这个简单的例子可以看出,发生死锁需要四个必要条件,如下: 1)互斥条件:     主体对于资源是独占的,图1中每条汽车道只能跑一队汽车,不能跑第二队.  2)请求和等待条

SQL Server 中 RAISERROR 的用法详细介绍_mssql2005

 SQL Server 中 RAISERROR 的用法 raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql server 2005的帮助 ] 其语法如下: RAISERROR ( { msg_id | msg_str | @local_variable } { ,severity ,state } [ ,argument [ ,...n ] ] ) [ WITH option [ ,...n ] ] 简要说明一下:   第一个参数:{ msg_id |

SQL Server中的RAND函数的介绍和区间随机数值函数的实现

工作中会遇到SQL Server模拟数据生成以及数值列值(如整型.日期和时间数据类型)随机填充等等任务,这些任务中都要使用到随机数.鉴于此,本文将对SQL Server中随机数的使用简单做个总结 . T-SQL 随机有关的三个函数 RAND([seed] 此函数生成从0到1之间随机 float 值(详细说明查看https://technet.microsoft.com/zh-cn/library/ms177610(v=sql.90).aspx). CHECKSUM ( * | expressio

Sql Server中的DBCC命令详细介绍_MsSql

     今天研发中心办年会,晚上就是各自部门聚餐了,我个人喜欢喝干红,在干红中你可以体味到那种酸甜苦辣...人生何尝不是这样呢???正好ceo从美国带了干红回来,然后我就顺道开心的过了把瘾....一个字...爽....喝着有点多...到现在头还疼....回来地铁上想这个周末忙着找房子,书一点都没看,也没在博客上接着忽悠,想起了上篇博客有个哥们说普及普及DBCC,虽然有点迷迷糊糊的...看能不能写出点新花样....不管学什么语言,还是数据库,你得看的比人家深一层...最可悲的就是停留的在表层,这

缩小SQL Server中日志文件的方法介绍

前几天也碰到日志文件过大的问题,数据库实际大小为600M, 日志文件实际大小为33M, 但日志文件占用空间为2.8G!!! 试了多种方式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都没办法将文件缩小.无论如何,这应该算SQL SERVER的一个BUG吧. 后来找到下面的代码,就可以将日志文件缩小到自己想要的大小了.把代码COPY到查询分析器里,,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可(我已经用过多次了) SET NOCOUNT

Sql Server中的系统视图详细介绍_MsSql

本来想这个系列写点什么好呢,后来想想大家作为程序员,用的最多的莫过于数据库了,但是事实上很多像我这样工作在一线的码农,对sql都一知半解,别谈优化和对数据库底层的认识了,我也是这样...  一:那些系统视图 1. 系统视图是干什么呢? 从名字上看就知道,系统视图嘛?猜的不错的话,就是存放一些sqlserver系统的一些信息,很好,恭喜你,答对了.  2. 都定义在哪呢?  为了让你眼见为实,下面截图看看,从截图中你可以看到,不管是"系统数据库"还是"用户数据库"都是

Sql Server中的系统视图详细介绍

本来想这个系列写点什么好呢,后来想想大家作为程序员,用的最多的莫过于数据库了,但是事实上很多像我这样工作在一线的码农,对sql都一知半解,别谈优化和对数据库底层的认识了,我也是这样... 一:那些系统视图 1. 系统视图是干什么呢? 从名字上看就知道,系统视图嘛?猜的不错的话,就是存放一些sqlserver系统的一些信息,很好,恭喜你,答对了. 2. 都定义在哪呢?  为了让你眼见为实,下面截图看看,从截图中你可以看到,不管是"系统数据库"还是"用户数据库"都是有这

Sql Server中的DBCC命令详细介绍

今天研发中心办年会,晚上就是各自部门聚餐了,我个人喜欢喝干红,在干红中你可以体味到那种酸甜苦辣...人生何尝不是这样呢???正好ceo从美国带了干红回来,然后我就顺道开心的过了把瘾....一个字...爽....喝着有点多...到现在头还疼....回来地铁上想这个周末忙着找房子,书一点都没看,也没在博客上接着忽悠,想起了上篇博客有个哥们说普及普及DBCC,虽然有点迷迷糊糊的...看能不能写出点新花样....不管学什么语言,还是数据库,你得看的比人家深一层...最可悲的就是停留的在表层,这样每次版本