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脚本
- DECLARE @return_code INT;
- DECLARE @TraceID INT;
- DECLARE @maxfilesize BIGINT;
- SET @maxfilesize = 5;
- --step 1: create a new empty trace definition
- EXEC sp_trace_create
- @traceid OUTPUT
- , @options = 2
- , @tracefile = N'C:\TraceFiles\LongRunningQueries'
- , @maxfilesize = @maxfilesize
- , @stoptime =NULL
- , @filecount = 2;
- -- step 2: add the events and columns
- EXEC sp_trace_setevent
- @traceid = @TraceID
- , @eventid = 10 -- RPC:Completed
- , @columnid = 1 -- TextData
- , @on = 1;--include this column in trace
- EXEC sp_trace_setevent
- @traceid = @TraceID
- , @eventid = 10 -- RPC:Completed
- , @columnid = 13 --Duration
- , @on = 1;--include this column in trace
- EXEC sp_trace_setevent
- @traceid = @TraceID
- , @eventid = 10 -- RPC:Completed
- , @columnid = 15 --EndTime
- , @on = 1;--include this column in trace
- EXEC sp_trace_setevent
- @traceid = @TraceID
- , @eventid = 12 -- SQL:BatchCompleted
- , @columnid = 1 -- TextData
- , @on = 1;--include this column in trace
- EXEC sp_trace_setevent
- @traceid = @TraceID
- , @eventid = 12 -- SQL:BatchCompleted
- , @columnid = 13 --Duration
- , @on = 1;--include this column in trace
- EXEC sp_trace_setevent
- @traceid = @TraceID
- , @eventid = 12 -- SQL:BatchCompleted
- , @columnid = 15 --EndTime
- , @on = 1;--include this column in trace
- -- step 3: add duration filter
- DECLARE @DurationFilter BIGINT;
- SET @DurationFilter = 10000000; --duration in microseconds
- EXEC sp_trace_setfilter
- @traceid = @TraceID
- , @columnid = 13
- , @logical_operator = 0 --AND
- , @comparison_operator = 4 -- greater than or equal to
- , @value = @DurationFilter; --filter value
- 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所无法提供的
SQL Server中追踪器Trace的介绍和简单使用的更多相关文章
- SQL Server中的RAND函数的介绍和区间随机数值函数的实现
工作中会遇到SQL Server模拟数据生成以及数值列值(如整型.日期和时间数据类型)随机填充等等任务,这些任务中都要使用到随机数.鉴于此,本文将对SQL Server中随机数的使用简单做个总 ...
- SQL Server 中的6种事务隔离级别简单总结
本文出处:http://www.cnblogs.com/wy123/p/7218316.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...
- SQL Server中,with as使用介绍
一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候 ...
- Sql Server中的DBCC命令详细介绍
一:DBCC 1:什么是DBCC 我不是教学老师,我也说不到没有任何无懈可击的定义,全名:Database Console Commands.顾名思义“数据库控制台命令”,说到“控制台“,我第一反应就 ...
- SQL Server中关于跟踪(Trace)那点事
前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案. 简 ...
- 【转】SQL Server中关于跟踪(Trace)那点事
前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案. 简 ...
- SQL Server中关于跟踪(Trace)那点事(转载)
前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案. 简 ...
- 【转贴】SQL Server中关于跟踪(Trace)那点事
SQL Server中关于跟踪(Trace)那点事 https://www.cnblogs.com/zhijianliutang/p/4113911.html 作者很牛B.. 前言 一提到跟踪俩字,很 ...
- SQL Server中解决死锁的新方法介绍
SQL Server中解决死锁的新方法介绍 数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁,通过SQL Server 2005, 现在似乎有了一种新的解决办法. 将下面的 ...
随机推荐
- Ruby Web实时消息后台服务器推送技术---GoEasy
越来越多的项目需要用到实时消息的推送与接收,怎样用Ruby实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推 ...
- 微软职位内部推荐-UX Designer II
微软近期Open的职位: Search Technology Center Asia (STCA) Position: UX Designer Location: Beijing, China Sea ...
- linux输入输出重定向
http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html 在Linux下,当一个用户进程被创建的时候,系统会自动为该进程创建三个数据 ...
- [转]仿World Wind构造自己的C#版插件框架——WW插件机制精简改造
很久没自己写东西啦,早该好好总结一下啦!一个大师说过“一个问题不应该被解决两次!”,除了一个好脑筋,再就是要坚持总结. 最近需要搞个系统的插件式框架,我参照World Wind的插件方式构建了个插件框 ...
- C#创建Windows Service(Windows 服务)基础教程
Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...
- JavaScript简易教程(转)
原文:http://www.cnblogs.com/yanhaijing/p/3685304.html 这是我所知道的最完整最简洁的JavaScript基础教程. 这篇文章带你尽快走进JavaScri ...
- 报这个错 unrecognized selector sent to instance
1.给一个对象赋空值: 2.调不存在的方法:3.数据类型不对.
- 20145215《Java程序设计》实验一实验报告
实验一 Java开发环境的熟悉 实验内容及步骤 使用JDK编译.运行简单的Java程序 命令行下程序开发: 在命令行下建立实验目录,进入该目录后创建exp1目录 敲入以下代码: package exp ...
- C#异步编程一
前几天把Code First系列总结完,想着下步总结什么,原本想着XML,不过XML的内容比较多,还有3天班就中秋节了,想在中秋节前在完成一个系列,所以决定把异步这块总结下.说起异步可能会认为就是多线 ...
- 风清杨之Oracle的安装与说明
1.Oracle官网与下载地址 Oracle中文官网:http://www.oracle.com/cn/index.html Oracle中文官网下载:http://www.oracle.com/te ...