SQL Server Profiler T-SQL跟踪

本文介绍了如何使用sp_trace_create创建SQL Server跟踪,包括设置跟踪选项、添加事件及筛选条件等,并提供了实用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sp_trace_create
 创建跟踪定义。新的跟踪将处于停止状态。

语法:

sp_trace_create [ @traceid = ] trace_id OUTPUT
          , [ @options = ] option_value 
          , [ @tracefile = ] 'trace_file' 
     [ , [ @maxfilesize = ] max_file_size ]
     [ , [ @stoptime = ] 'stop_time' ]
     [ , [ @filecount = ] 'max_rollover_files' ]

参数:

@traceid
跟踪的编号。数据类型为 int,默认为 NULL。用户使用 trace_id 值标识、修改和控制此存储过程定义的跟踪。

@options
指定为跟踪设置的选项。option_value 的数据类型为 int,无默认设置。

选项名 值 说明
TRACE_FILE_ROLLOVER 2 指定当达到 max_file_size ,将关闭当前跟踪文件并创建新文件。常用的使用这个值。
SHUTDOWN_ON_ERROR 4 指定无论任何原因,如果不能将跟踪写入文件,则 SQL Server 将关闭。
TRACE_PRODUCE_BLACKBOX 6 同时启用上面两个选项,2和4 
TRACE_PRODUCE_BLACKBOX 8 指定服务器产生的最后 5MB 跟踪信息记录将由服务器保存。

@tracefile
指定跟踪将写入的位置和文件名。trace_file 的数据类型为 nvarchar(245),没有默认设置。trace_file 可以是本地目录,也可以是到共享或路径。

@maxfilesize
指定跟踪文件可以增长到的最大文件大小 (MB)。max_file_size 的数据类型为 bigint,默认设置为 5。

@stoptime
指定停止跟踪的日期和时间,stop_time 的数据类型为 datetime,默认值为 NULL。如果为 NULL,该跟踪将一直运行,直到它被手动停止或服务器关闭。

@filecount
指定使用同一基准文件名维护的最大跟踪文件数。max_rollover_files 的数据类型为 int,其值大于 1。这个选项通常不用设置,当然要保证有足够的磁盘空间,否则磁盘空间填满的时候跟踪会自动停止。

返回值:

返回代码 说明
0 没有错误。
1 未知错误
10 无效选项。指定的选项不兼容时返回此代码。
12 文件未创建。
13 内存不足。在没有足够内存执行指定的操作时返回此代码。
14 无效停止时间。在指定的停止时间已发生时返回此代码。
15 参数无效。在用户已提供不兼容的参数时返回此代码。

sp_trace_setevent
在跟踪中添加或删除事件或事件列。只能对已停止的现有跟踪(status 为 0)执行 sp_trace_setevent。如果对不存在的或其 status 值不为 0 的跟踪执行此存储过程,则将返回错误。

语法:

sp_trace_setevent [ @traceid = ] trace_id 
          , [ @eventid = ] event_id
          , [ @columnid = ] column_id
          , [ @on = ] on


参数:

@traceid
要修改的跟踪的 ID。

@eventid
要打开的事件的 ID。event_id 的数据类型为 int,无默认值。可以跟踪的事件有几百个,这里只列出较常用的几个,其他的MSDN上有完整的介绍。

事件号 事件名称  说明
10 RPC:Completed 在完成了远程过程调用 (RPC) 时发生。
12 SQL:BatchCompleted 在完成了 Transact-SQL 批处理时发生。
14 Audit Login 在用户成功登录到 Microsoft SQL Server 时发生。
17 ExistingConnection 在检测所有用户在启动跟踪前连接到 SQL Server 的活动。
25 Lock:Deadlocktd>  指示两个并发事务由于试图获得对方事务拥有的资源的不兼容锁而发生了相互死锁。
59 Lock:Deadlock Chain 为导致死锁的每个事件而生成。


@columnid
要为该事件添加的列的 ID。column_id 的数据类型为 int,无默认值。这里也只列常用的。

列号 列名  说明
1 TextData 与跟踪内捕获的事件类相关的文本值。
8 HostName 发起请求的客户端计算机的名称。
10 ApplicationName 创建与 SQL Server 实例的连接的客户端应用程序的名称。此列由应用程序传递的值填充,而不是由所显示的程序名填充。
11 LoginName 客户端的 SQL Server 登录名。
12 SPID SQL Server 分配给与客户端关联的进程的服务器进程 ID。
13 Duration 事件所花费的实耗时间(毫秒)。Hash Warning 事件不填充该数据列。
14 StartTime 事件开始的时间(如果可用)。
27 EventClass 被记录的事件类的类型。
35 DatabaseName USE database 语句中指定的数据库名称。


@on
指定将事件设置为 ON (1) 还是 OFF (0)。on 的数据类型为 bit,无默认值。

sp_trace_setfilter
将筛选应用于跟踪。只能对已停止的现有跟踪(status 的值为 0)执行 sp_trace_setfilter。如果对不存在的跟踪或其 status 值不为 0 的跟踪执行此存储过程,则 SQL Server 将返回错误。

语法:

sp_trace_setfilter [ @traceid = ] trace_id 
          , [ @columnid = ] column_id
          , [ @logical_operator = ] logical_operator
          , [ @comparison_operator = ] comparison_operator
          , [ @value = ] value


@traceid
要为其设置筛选器的跟踪的 ID。

@columnid
应用筛选器的列的 ID。

@logical_operator
指定将应用 AND (0) 运算符还是应用 OR (1) 运算符。logical_operator 的数据类型为 int,无默认值。

@comparison_operator
指定要执行的比较的类型。comparison_operator 的数据类型为 int,无默认值。

值  比较运算符 
0  =(等于) 
1  <>(不等于) 
2  >(大于) 
3  <(小于) 
4  >=(大于或等于) 
5  <=(小于或等于) 
6  LIKE 
7 NOT LIKE 

@value
指定要在其上进行筛选的值。

sp_trace_setstatus
修改指定跟踪的当前状态。

语法:

sp_trace_setstatus [ @traceid = ] trace_id 
          , [ @status = ] status


@traceid
trace_id要修改的跟踪的 ID。

@status
指定要在跟踪上实现的操作。status 的数据类型为 int,无默认值。

状态 说明
0 停止指定的跟踪。
1 启动指定的跟踪。
2 关闭指定的跟踪并从服务器中删除其定义。

注意:在关闭跟踪前首先必须先停止它。在查看跟踪前首先必须先停止并关闭它。如果要删除则将状态指定为2。

sp_trace_generateevent
创建用户定义事件。

fn_trace_gettable
以表格格式返回一或多个跟踪文件的内容。

语法:

fn_trace_gettable ( filename , number_files )


@filename
指定要读取的初始跟踪文件。filename 的数据类型为 nvarchar(256),无默认值。

@number_files
指指定要读取的滚动更新文件数。此数包括 filename 中指定的初始文件。number_files 的数据类型为 int。如果 number_files 指定为 “default”,fn_trace_gettable 将读取所有的滚动更新文件,直到到达跟踪结尾为止。

fn_trace_getinfo
返回有关指定跟踪或全部现有跟踪的信息。

语法:

fn_trace_getinfo ( trace_id )


@trace_id
跟踪的 ID。trace_id 的数据类型为 int。当传递特定跟踪的 ID 时,fn_trace_getinfo 将返回有关该跟踪的信息。传递 0 或字符串 'default' 时,此函数将返回有关所有活动跟踪的信息。

fn_trace_geteventinfo
返回有关所跟踪的事件的信息。

fn_trace_getfilterinfo
返回有关应用于指定跟踪的筛选器的信息。

以上基本是从联机帮助上Copy的,都是理论,下面是我自己写的应用。

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/hb_gx/archive/2007/08/15/1745800.aspx

### ### 使用 SQL Server Profiler 查看 T-SQL 语句的方法 SQL Server ProfilerSQL Server 提供的一款性能监视工具,可用于捕获和分析数据库中执行的事件。通过该工具,用户可以查看在特定操作过程中执行的 T-SQL 语句,从而帮助排查错误或优化性能。 要查看 T-SQL 语句,可以在连接到目标数据库服务器后打开 SQL Server Profiler,创建一个新的跟踪(Trace),并选择适当的事件类别来捕获 T-SQL 操作[^1]。例如,可以通过选择 `SQL:StmtCompleted` 或 `SP:StmtCompleted` 事件来捕捉单独完成的 T-SQL 语句[^2]。 在跟踪窗口运行时,进行相关数据库操作(如网页端调用数据库接口),Profiler 将实时显示所执行的 T-SQL 语句。用户可以通过点击各个语句逐条检查,以发现潜在的语法错误或逻辑问题[^1]。 此外,在完成跟踪后,可以将结果保存为跟踪文件或导入到数据库表中,以便后续使用 SELECT 查询进行分析[^3]。 --- ### 示例:如何配置 SQL Server Profiler 跟踪 T-SQL 语句 以下是一个基本的事件配置示例,用于捕获 T-SQL 语句: ```sql -- 示例配置脚本(T-SQL)用于创建一个跟踪定义 EXEC sp_trace_create @traceid OUTPUT, 0, N'C:\Traces\MyTrace', NULL, NULL; EXEC sp_trace_setevent @traceid, 10, 1, 1; -- TextData EXEC sp_trace_setevent @traceid, 10, 3, 1; -- DatabaseID EXEC sp_trace_setevent @traceid, 10, 11, 1; -- LoginName EXEC sp_trace_setevent @traceid, 10, 14, 1; -- StartTime EXEC sp_trace_setevent @traceid, 10, 12, 1; -- SPID EXEC sp_trace_setevent @traceid, 10, 6, 1; -- Severity EXEC sp_trace_setfilter @traceid, 10, 0, 6, N'SELECT%'; EXEC sp_trace_setstatus @traceid, 1; ``` 上述脚本创建了一个基本的跟踪,并设置了一些关键字段来过滤和记录 T-SQL 语句的执行信息。 --- ### 注意事项 - 在生产环境中启用 SQL Server Profiler 需要谨慎,因为频繁的事件捕获可能会对系统性能造成显著影响,尤其是在存储过程中包含大量 T-SQL 语句的情况下。 - 为了减少性能开销,建议仅在需要调试或性能分析时启用 Profiler,并尽量缩小跟踪时间范围和筛选条件。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值