使用SQL语句实现SQL Profiler的功能
2012-03-29 17:44
260 查看
SQL Profiler是个好东西。极大的方便了我们查看SQL语句的执行情况,也能帮助我们了解SQL的很多内部状态。那么除了运行SQL Profiler就没有其他方法可以实现了吗?当然不会,这里提供一个简单的示例以示说明:
1. 使用系统存储过程sp_trace_create建立一个Trace,这个SP可以在on-line help上找到
DECLARE @TraceIdOut int, @On bit, @rc int
-- Define the trace
exec @rc = sp_trace_create @TraceIdOut OUTPUT, 2, N'c:/sqlauditfile1' --最后一个参数是最终Trace结果存放的位置
print @TraceIdOut --打印Trace ID的目的是当需要停止该Trace时好知道该挺哪个
2. 使用系统存储过程sp_trace_setevent告知SQL所要监听的事件以及事件返回的信息,同样具体参数参看on-line help
SET @On = 1
exec sp_trace_setevent @TraceIdOut, 13, 1, @On --最后一个参数表明开始监听,这里很是奇特,该参数是bit型,但是直接传1不行,必须是一个bit型的变量。。。
--这个例子监听的是SQL:BatchCompleted事件,返回的是SQL最终执行的语句(TextData)
--如果想监听多个事件,或者需要返回多个信息,那么就多次执行该语句(不同的参数哦)
3. 使用系统存储过程sp_trace_setstatus让指定Trace开始运行
exec @rc = sp_trace_setstatus @TraceIdOut, @status = 1
4.开始执行一些SQL语句。
5.执行差不多了,再次使用系统存储过程sp_trace_setstatus来停止Trace,并且关闭和删除这个Trace。
exec sp_trace_setstatus 1,0 --停止Trace
exec sp_trace_setstatus 1,2 --关闭和删除Trace
(
[u]SELECT * FROM sys.traces [/u]
使用 sp_trace_setstatus 預存程序來停止某個追蹤,語法如下:
[u]
sp_trace_setstatus <欲停止追蹤的追蹤識別碼>, 0
[/u]
EG:
--print @TraceIdOut
--SELECT * FROM sys.traces
--exec sp_trace_setstatus 2,0 --停止Trace
--exec sp_trace_setstatus 2,2 --关闭和删除Trace
之后则可以删除生成的跟踪文件
)
6.发现C盘下多了第一步建立的文件,用SQL Profilter打开看看吧。。。
注意:
1.如果不执行第5步,那么第一步建立的文件是打不开的。
2.SQL好像不能自行删除文件,也就是说如果文件存在,需要手工先行删除。
3.第一步打印Trace ID的目的是为了最后一步用,因为不在一起执行。。。
4.可以建立两个任务,第一个是一早执行,开始一个Trace;第二个是晚上执行,关闭Trace。那么客户一天的SQL语句执行情况都知道了。。
1. 使用系统存储过程sp_trace_create建立一个Trace,这个SP可以在on-line help上找到
DECLARE @TraceIdOut int, @On bit, @rc int
-- Define the trace
exec @rc = sp_trace_create @TraceIdOut OUTPUT, 2, N'c:/sqlauditfile1' --最后一个参数是最终Trace结果存放的位置
print @TraceIdOut --打印Trace ID的目的是当需要停止该Trace时好知道该挺哪个
2. 使用系统存储过程sp_trace_setevent告知SQL所要监听的事件以及事件返回的信息,同样具体参数参看on-line help
SET @On = 1
exec sp_trace_setevent @TraceIdOut, 13, 1, @On --最后一个参数表明开始监听,这里很是奇特,该参数是bit型,但是直接传1不行,必须是一个bit型的变量。。。
--这个例子监听的是SQL:BatchCompleted事件,返回的是SQL最终执行的语句(TextData)
--如果想监听多个事件,或者需要返回多个信息,那么就多次执行该语句(不同的参数哦)
3. 使用系统存储过程sp_trace_setstatus让指定Trace开始运行
exec @rc = sp_trace_setstatus @TraceIdOut, @status = 1
4.开始执行一些SQL语句。
5.执行差不多了,再次使用系统存储过程sp_trace_setstatus来停止Trace,并且关闭和删除这个Trace。
exec sp_trace_setstatus 1,0 --停止Trace
exec sp_trace_setstatus 1,2 --关闭和删除Trace
(
[u]SELECT * FROM sys.traces [/u]
id | int | 追蹤識別碼。 |
status | int | 追蹤狀態: 0 = 已停止 1 = 執行中 |
[u]
sp_trace_setstatus <欲停止追蹤的追蹤識別碼>, 0
[/u]
EG:
--print @TraceIdOut
--SELECT * FROM sys.traces
--exec sp_trace_setstatus 2,0 --停止Trace
--exec sp_trace_setstatus 2,2 --关闭和删除Trace
之后则可以删除生成的跟踪文件
)
6.发现C盘下多了第一步建立的文件,用SQL Profilter打开看看吧。。。
注意:
1.如果不执行第5步,那么第一步建立的文件是打不开的。
2.SQL好像不能自行删除文件,也就是说如果文件存在,需要手工先行删除。
3.第一步打印Trace ID的目的是为了最后一步用,因为不在一起执行。。。
4.可以建立两个任务,第一个是一早执行,开始一个Trace;第二个是晚上执行,关闭Trace。那么客户一天的SQL语句执行情况都知道了。。
相关文章推荐
- 使用SQL语句实现SQL Profiler的功能
- 使用Java注解实现拼接sql语句的功能
- sqlServer 中使用sql语句实现固定分页功能
- jsp分页(使用sql语句实现,并非easyui的json)
- .NET数据库编程求索之路--3.使用ADO.NET实现(SQL语句篇)(1)
- 使用SQL语句实现分组的第一天
- 使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(二)
- 使用PreparedStatement 防止SQL攻击 实现预编译功能提高性能
- 使用反射让linq实现动态查询, 类似拼接sql语句的where 条件
- SQL Server设置主键自增长列(使用sql语句实现)
- (实战开发问题总结--SqLite)sqlite实现执行Sql语句返回单行单列功能
- 利用T-SQL语句,实现数据库的备份与还原的功能
- 请问有没有办法用一条sql语句来实现置顶功能
- 猫哥带你去战斗——Java Web开发——Java篇[9]——使用SQL语句实现增删改查
- 2014.09.23 mysql 一条sql语句实现实现搜索功能(加权排序)
- 使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(四)
- 利用T-SQL语句,实现数据库的备份与还原的功能
- 使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(一)
- 使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(二)
- 使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能