我正在尝试使用SQL事件探查器(SQL 2008)
对this problem进行问题排查在生产中运行跟踪几天后,最后再次发生错误,现在我正在尝试诊断原因。问题是跟踪有400k行,其中99.9%来自“报表服务器”,我甚至不知道它为什么打开,但它似乎每秒都在ping SQL Server ......
有没有办法从曲目中过滤掉一些记录,以便能够查看其余的记录? 我可以使用当前的.trc文件执行此操作,还是必须再次运行跟踪? 是否有其他应用程序可以查看可以为我提供此功能的.trc文件?
答案 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来解码事件编号。