有没有办法过滤SQL事件探查器跟踪?

时间:2009-09-21 02:58:27

标签: sql-server-2008 filter trace sqlprofiler

我正在尝试使用SQL事件探查器(SQL 2008)

this problem进行问题排查

在生产中运行跟踪几天后,最后再次发生错误,现在我正在尝试诊断原因。问题是跟踪有400k行,其中99.9%来自“报表服务器”,我甚至不知道它为什么打开,但它似乎每秒都在ping SQL Server ......

有没有办法从曲目中过滤掉一些记录,以便能够查看其余的记录? 我可以使用当前的.trc文件执行此操作,还是必须再次运行跟踪? 是否有其他应用程序可以查看可以为我提供此功能的.trc文件?

5 个答案:

答案 0 :(得分:22)

您可以将捕获的跟踪加载到SQL Server Profiler中:Viewing and Analyzing Traces with SQL Server Profiler

或者您可以加载到ClearTrace(免费版)这样的工具来执行工作负载分析。

您可以加载到SQL Server表中,如下所示:

SELECT * INTO TraceTable
FROM ::fn_trace_gettable('C:\location of your trace output.trc', default)

然后,您可以运行查询来聚合数据,例如:

SELECT 
  COUNT(*) AS TotalExecutions,     
  EventClass, 
  CAST(TextData as nvarchar(2000)) ,
  SUM(Duration) AS DurationTotal ,
  SUM(CPU) AS CPUTotal ,
  SUM(Reads) AS ReadsTotal ,
  SUM(Writes) AS WritesTotal
FROM 
  TraceTable
GROUP BY 
  EventClass, 
  CAST(TextData as nvarchar(2000))
ORDER BY 
  ReadsTotal DESC

另见:MS SQL Server 2008 - How Can I Log and Find the Most Expensive Queries?

在启动之前为捕获的跟踪设置过滤器也很常见。例如,常用的过滤器仅限于需要超过一定数量读取的事件,例如5000.

答案 1 :(得分:4)

在本地加载.trc,然后使用保存到数据库到本地数据库,然后查询您的内容。

答案 2 :(得分:3)

这些建议适用于现有跟踪 - 如果要在发生跟踪时过滤跟踪,可以在启动之前在跟踪上设置事件过滤器。

根据我的经验,最有用的过滤器是应用程序名称 - 为此,您必须确保用于连接到数据库的每个连接字符串都包含相应的Application Name值,即:

“... Server = MYDB1; Integrated Authentication = SSPI; Application Name = MyPortal; ...”

然后在新跟踪的跟踪属性中,选择“事件选择”选项卡,然后单击“列过滤器...”

选择ApplicationName过滤器,并将值添加到LIKE以仅包含您指定的连接,即在LIKE字段中使用MyPortal仅包含具有该应用程序名称的连接的事件。

这将阻止您收集Reporting Services生成的所有内容,例如,并使后续分析更快。

还有很多其他过滤器可用,所以如果您知道要查找的内容,例如长执行(持续时间)或大IO(读取,写入),那么您也可以对此进行过滤。

答案 3 :(得分:2)

从SQL Server 2005开始,您可以直接从SQL事件探查器过滤.trc文件内容;不将其导入SQL表。只需按照此处建议的步骤进行操作:

http://msdn.microsoft.com/en-us/library/ms189247(v=sql.90).aspx

其他提示:您可以使用'%'作为过滤器通配符。例如,如果您想按照SRV等HOSTNAME进行过滤,则可以使用SRV%。

答案 4 :(得分:0)

在这里,您可以找到一个完整的脚本来查询默认跟踪,其中包含可以过滤的完整事件列表:

http://zaboilab.com/sql-server-toolbox/anayze-sql-default-trace-to-investigate-instance-events


您必须查询sys.fn_trace_gettable(@ TraceFileName,default),加入sys.trace_events来解码事件编号。