筛选跟踪

适用于:SQL Server

筛选器将限制跟踪内收集的事件。 如果没有设置筛选器,则跟踪输出中将返回选定事件类的所有事件。 例如,如果将跟踪中的 Windows 用户名限定为特定用户,将仅输出与那些用户相关的数据。

并不一定要为跟踪设置筛选器。 但是,筛选器会将跟踪过程中的开销降到最低。 筛选器将返回有针对性的数据,这样会使性能分析和审核变得更容易。

若要筛选跟踪中捕获的事件数据,请选择跟踪事件准则(仅返回跟踪中的相关数据)。 例如,可以包括或排除监视跟踪中的特定应用程序的活动。

注意

SQL Server Profiler 创建跟踪时,默认情况下,将筛选出自己的活动。

又如,如果监视查询以确定执行时间最长的批处理,请将跟踪事件准则设置为仅监视那些执行时间超过 30 秒的批处理(CPU 最小值为 30,000 毫秒)。

筛选器创建指南

通常,按照下列步骤筛选跟踪。

  1. 在跟踪中标识要包括的事件。

  2. 标识包含所需信息的数据和数据列。

  3. 标识所需数据的子集并基于该数据子集定义筛选器。

例如,你可能只对超过一定时间长度的事件感兴趣。 你可以创建包括事件(其中 Duration 数据列超过 300 毫秒)的跟踪。 跟踪将不包括在 300 毫秒内完成的事件。

你可以使用 SQL Server Profiler 或 Transact-SQL 存储过程创建筛选器。

在跟踪模板中筛选事件

在跟踪中筛选事件 (SQL Server Profiler)

设置跟踪筛选器 (Transact-SQL)

修改筛选器

修改筛选器 (SQL Server Profiler)

筛选器可用性取决于数据列。 某些数据列无法筛选。 可筛选的数据列只能使用部分关系运算符进行筛选,如下表所示。

关系运算符 运算符 说明
Like LIKE 指定跟踪事件数据必须类似于输入文本。 允许使用多个值。
不类似于 不类似于 指定跟踪事件数据不能与输入文本类似。 允许使用多个值。
等于 = 指定跟踪事件数据必须等于输入的值。 允许使用多个值。
不等于 <> 指定跟踪事件数据不能等于输入的值。 允许使用多个值。
大于 > 指定跟踪事件数据必须大于输入的值。
大于等于 >= 指定跟踪事件数据必须大于或等于输入的值。
小于 < 指定跟踪事件数据必须小于输入的值。
小于或等于 <= 指定跟踪事件数据必须小于或等于输入的值。

下表列出了可筛选数据列和可用关系运算符。

数据列 关系运算符
ApplicationName LIKE、NOT LIKE
BigintData1 =、<>、>=、<=
BigintData2 =、<>、>=、<=
BinaryData 使用 SQL Server Profiler 筛选此数据列中的事件。 有关详细信息,请参阅 使用 SQL Server Profiler 筛选跟踪
ClientProcessID =、<>、>=、<=
ColumnPermissions =、<>、>=、<=
CPU =、<>、>=、<=
DatabaseID =、<>、>=、<=
DatabaseName LIKE、NOT LIKE
DBUserName LIKE、NOT LIKE
持续时间 =、<>、>=、<=
EndTime >=、<=
错误 =、<>、>=、<=
EventSubClass =、<>、>=、<=
FileName LIKE、NOT LIKE
GUID 使用 SQL Server Profiler 筛选此数据列中的事件。 有关详细信息,请参阅 使用 SQL Server Profiler 筛选跟踪
Handle =、<>、>=、<=
HostName LIKE、NOT LIKE
IndexID =、<>、>=、<=
IntegerData =、<>、>=、<=
IntegerData2 =、<>、>=、<=
IsSystem =、<>、>=、<=
LineNumber =、<>、>=、<=
LinkedServerName LIKE、NOT LIKE
LoginName LIKE、NOT LIKE
LoginSid 使用 SQL Server Profiler 筛选此数据列中的事件。 有关详细信息,请参阅 使用 SQL Server Profiler 筛选跟踪
MethodName LIKE、NOT LIKE
模式 =、<>、>=、<=
NestLevel =、<>、>=、<=
NTDomainName LIKE、NOT LIKE
NTUserName LIKE、NOT LIKE
Exchange Spill =、<>、>=、<=
ObjectID2 =、<>、>=、<=
ObjectName LIKE、NOT LIKE
ObjectType =、<>、>=、<=
Offset =、<>、>=、<=
OwnerID =、<>、>=、<=
OwnerName LIKE、NOT LIKE
ParentName LIKE、NOT LIKE
权限 =、<>、>=、<=
ProviderName LIKE、NOT LIKE
Reads =、<>、>=、<=
RequestID =、<>、>=、<=
RoleName LIKE、NOT LIKE
RowCounts =、<>、>=、<=
SessionLoginName LIKE、NOT LIKE
严重性 =、<>、>=、<=
SourceDatabaseID =、<>、>=、<=
SPID =、<>、>=、<=
SqlHandle 使用 SQL Server Profiler 筛选此数据列中的事件。 有关详细信息,请参阅 使用 SQL Server Profiler 筛选跟踪
StartTime >=、<=
状态 =、<>、>=、<=
Success =、<>、>=、<=
TargetLoginName LIKE、NOT LIKE
TargetLoginSid 使用 SQL Server Profiler 筛选此数据列中的事件。 有关详细信息,请参阅 使用 SQL Server Profiler 筛选跟踪
TargetUserName LIKE、NOT LIKE
TextData * LIKE、NOT LIKE
TransactionID =、<>、>=、<=
类型 =、<>、>=、<=
Writes =、<>、>=、<=
XactSequence =、<>、>=、<=

* 如果从 osql 实用工具或 sqlcmd 实用工具跟踪事件,则始终将 % 追加到 TextData 数据列上的筛选器。

SQL 跟踪作为一种安全预防措施,会自动从跟踪中省略任何影响密码的、与安全相关的存储过程。 此安全机制不可配置,并且始终有效。 此机制阻止有权跟踪 SQL Server 上的所有活动的用户捕获密码。

下列与安全相关的存储过程会受到监视,而不会将输出写入 TextData 数据列:

sp_addapprole (Transact-SQL)

sp_adddistpublisher (Transact-SQL)

sp_adddistributiondb (Transact-SQL)

sp_adddistributor (Transact-SQL)

sp_addlinkedserver (Transact-SQL)

sp_addlinkedsrvlogin (Transact-SQL)

sp_addlogin (Transact-SQL)

sp_addmergepullsubscription_agent (Transact-SQL)

sp_addpullsubscription_agent (Transact-SQL)

sp_addremotelogin (Transact-SQL)

sp_addsubscriber (Transact-SQL)

sp_approlepassword (Transact-SQL)

sp_changedistpublisher (Transact-SQL)

sp_changesubscriber (Transact-SQL)

sp_dsninfo (Transact-SQL)

sp_helpsubscription_properties (Transact-SQL)

sp_link_publication (Transact-SQL)

sp_password (Transact-SQL)

sp_setapprole (Transact-SQL)